C - 为char类型数组分配内存

时间:2017-05-10 12:19:47

标签: c arrays dynamic-memory-allocation

我有创建char类型数组的任务,然后输入数组应该具有的元素数,然后为该数组分配内存并在将所有元素输入数组后打印它。问题是,我知道如果数组是int类型,怎么做,但对于char我只用于随机字符的打印。我写了这段代码:

#include <stdio.h>
#include <stdlib.h>

int main() {


    int n, i;
    char *arrA;


    printf("Enter number of elements: ");
    scanf("%d", &n);
    printf("Enter array elements: \n");
    arrA = (char*)malloc(n * sizeof(char));
    for (i = 0; i < n; ++i) {
        scanf("Array element: %c \n", arrA + i);
    }

    for (i = 0; i < n; ++i) {
        printf("%d. array element is: %c\n", i + 1, arrA + i);
    }

    free(arrA);
    return 0;
}

如何使其适用于char类型数组?

3 个答案:

答案 0 :(得分:3)

更改行:

printf("%d. array element is: %c\n", i + 1, arrA + i);

到:

printf("%d. array element is: %c\n", i + 1, *(arrA + i));

或:

printf("%d. array element is: %c\n", i + 1, arrA[i]);

现在你正在尝试打印指针本身,而不是它的内容。

另请阅读this link,了解为何不在检查malloc的结果时投放mallocthis one的结果。

答案 1 :(得分:2)

arrA + i指针。您需要在*(arrA + i)参数中使用printf,或者使用更清晰且完全等效的arrA[i]

注意:sizeof(char)是C标准的1,因此是多余的。也不要在右侧施放malloc。见Do I cast the result of malloc?。最后,请始终检查malloc的结果。如果它是NULL则内存分配失败。

答案 2 :(得分:1)

其他答案的补充:

你想要这个:

#include <stdio.h>
#include <stdlib.h>

int main() {
  int n, i;
  char *arrA;

  printf("Enter number of elements: ");
  scanf("%d", &n);
  printf("Enter array elements followed by [Enter] key: \n");

  getc(stdin);  // absorb \n (scanf oddity)

  arrA = malloc(n * sizeof(char));

  for (i = 0; i < n; ++i) {
    scanf("%c", &arrA[i]);
  }

  for (i = 0; i < n; ++i) {
    printf("%d. array element is: %c\n", i + 1, arrA[i]);
  }

  free(arrA);
  return 0;
}