gpt4 book ai didi

c - 动态增长的字符串数组

转载 作者:IT王子 更新时间:2023-10-29 01:24:40 30 4
gpt4 key购买 nike

我正在尝试构建一个动态增长的字符串数组。字符串的数量和每个字符串的长度在编译时都是未知的。这是我到目前为止想出的代码(这只是我在玩语法):

char **result = NULL;
char *temp = NULL;
result = (char **)realloc (result,sizeof(char *) * 1);
temp= (char *)realloc(temp,5 * sizeof(char));

strcat(temp,"hello");


temp= (char *)realloc(temp,10 * sizeof(char));

strcat(temp," world");

printf ("%s \n", temp);
result[0]=temp;
free(temp);
printf ("%s \n", result[0]);

result = (char **)realloc (result, sizeof(char *) * 2);
temp= (char *)realloc(temp,10 * sizeof(char));
strcat(temp,"0123456789");

temp= (char *)realloc(temp,15 * sizeof(char));
strcat(temp,"asdfg");

printf ("%s \n", temp);
result[1]=temp;
free(temp);
printf ("%s \n", result[0]);
printf ("%s \n", result[1]);)

现在,当我打印 result[0] 或 result[1] 时,它只是一个空字符串,为什么 result[1]=temp;工作?

这是我之前尝试过的方法,但没有用,在最后一行使用 realloc() 时,我不断收到“无效大小”错误:

char **result = NULL;
result = (char **)realloc (result,sizeof(char *) * 1);
result[0]= (char *)realloc(result[0],5 * sizeof(char));

strcat(result[0],"hello");
printf ("%s \n", result[0]);

result[0]= (char *)realloc(result[0],10 * sizeof(char));

strcat(result[0]," world");
printf ("%s \n", result[0]);

result = (char **)realloc (result, sizeof(char *) * 2);
result[1]= (char *)realloc(result[1],10 * sizeof(char));
strcat(result[0],"0123456789");

result[0]= (char *)realloc(result[1],15 * sizeof(char));
strcat(result[0],"asdfg");

如果有人可以帮助我使任一版本正常工作,我将不胜感激。

更新:好的,我让两个版本的代码都能正常工作。现在,当我尝试在我的实际程序中使用这种相同的格式时,我会收到诸如

之类的错误
*** glibc detected *** ./uvicfmt3: realloc(): invalid next size: 0x08ed3170 ***

现在在我的程序中,“结果”被声明为全局变量(使用我的代码的第二个版本),并且在不同的子例程中调用 realloc 函数。这是导致问题的原因吗?我该如何解决这个问题?

最佳答案

下面的语句使result[0]temp都指向同一个内存地址:

result[0]=temp;

完成上述任务后,您可以free(temp) 并尝试访问result[0]:

free(temp);
printf ("%s \n", result[0]);

这是未定义的行为,因为您正在访问刚刚被释放的内存。

对于 result[1] 的相同代码也是如此。

关于c - 动态增长的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327231/

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