我正在制作一个分配20x20字符数组的程序。这是我做的:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *a=(char*) calloc(20,sizeof(char[20]));
a[0]="abcd";
printf("%s\n",a[0]);
return 0;
}
上述代码的输出为(null)
。有人可以解释一下吗?据我说,我正在分配一个指针a
20个空格,每个空格大小为20。所以a[0]
在技术上有足够的内存来存储“abcd”,但输出是null
。
答案 0 :(得分:2)
您拥有的变量a
的类型不正确:它应该是char (*a)[20]
(是的,带括号)。
此行也不正确:
a[0]="abcd";
你不能像这样分配C字符串,因为a[0]
不是指针:它是一个包含20个字符的数组,所以你需要使用strcpy
代替:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char (*a)[20]=calloc(20, sizeof(char[20]));
strcpy(a[0], "abcd");
strcpy(a[1], "wxyz");
printf("%s\n",a[0]);
printf("%s\n",a[1]);
return 0;
}
查看运行here的更正程序。
注意:与C ++不同,C不需要对void
指针进行类型转换。 C程序通常省略从malloc
,calloc
和realloc
返回的结果的强制转换,因为已根据所分配变量的类型了解该类型。