分配2D字符数组

时间:2013-04-04 17:53:00

标签: c

我正在制作一个分配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;
}

Link to ideone

上述代码的输出为(null)。有人可以解释一下吗?据我说,我正在分配一个指针a 20个空格,每个空格大小为20。所以a[0]在技术上有足够的内存来存储“abcd”,但输出是null

1 个答案:

答案 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程序通常省略从malloccallocrealloc返回的结果的强制转换,因为已根据所分配变量的类型了解该类型。