gpt4 book ai didi

c - 为字符串数组分配内存

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:37 26 4
gpt4 key购买 nike

我想用两个函数填充一个字符串数组:第一个,如果我有 n 个字符串要分配,将分配 n 个内存空间;第二个将为每个读取的字符串分配内存

这是第一个函数:

char** allocate(int n)
{
char** t;
t=(char**)malloc(n*sizeof(char*));
if(!t) exit(-1);
return t;
}

这是第二个:

void fill(char*** t,int n)
{
int i;
char* help=" ";
for(i=0;i<n;i++)
{
printf("\n saisir la chaine n %d :",i+1);
scanf("%s",help);
*t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
strcpy(*t[i],help);
}
}

我没有忘记像这样调用 main 中的第二个:fill(&t,n);

问题是我在读取第一个字符串后出现错误,程序结束。

最佳答案

这一行

char* help=" ";

只是定义了一个指向""的指针。

没有分配内存来存储要通过 scanf() 扫描的数据。

如果要扫描的字符数有上限,请执行以下操作:

#define SCAN_MAXIMUM (255)
#define SCAN_FMT_STRINGIFY(max) "%"#max"s"
#define SCAN_FMT(max) SCAN_FMT_STRINGIFY(max)

...

char help[SCAN_MAXIMUM + 1]; /* Add one for the road^H^H^H^H`0`-terminator. */
scanf(SCAN_FMT(SCAN_MAXIMUM), help);

这些行也不是你想要的:

    *t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
strcpy(*t[i],help);

[] 运算符比 * 运算符绑定(bind)得更紧密,所以这些行应该看起来像

    (*t)[i] = malloc((strlen(help) + 1));
strcpy((*t)[i], help);

另外^2:在 C 中不需要强制转换 malloc/calloc/realloc 的结果,也不推荐这样做。


另外^3:sizeof(char) 被定义为等于1

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

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