我有创建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类型数组?
答案 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]);
现在你正在尝试打印指针本身,而不是它的内容。
答案 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;
}