0

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

链接到 ideone

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

4

1 回答 1

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;
}

请参阅此处运行的更正程序。

注意:与 C++ 不同,C 不需要void指针的类型转换。C 程序通常会省略从malloccalloc和中返回的结果转换realloc,因为类型已经从被分配的变量的类型中得知。

于 2013-04-04T17:53:54.410 回答