gpt4 book ai didi

c - 分配二维字符数组

转载 作者:行者123 更新时间:2023-11-30 14:20:05 24 4
gpt4 key购买 nike

我正在编写一个程序来分配 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)。有人可以解释一下吗?根据我的说法,我为指针分配了 20 个空间,每个空间的大小为 20。因此,从技术上来说,a[0] 有足够的内存来存储“abcd”,但输出为 null

最佳答案

您拥有的变量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 返回的结果的转换,因为类型已经从被分配的变量的类型。

关于c - 分配二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com