有人可以向我解释为什么这段代码不起作用。我正在查看一些问题,但未能找到答案。可能是因为(巨大的)缺乏知识。
感谢您提供任何帮助。
char** sentence = malloc(min);
char* temp = malloc(min2);
int i = 0;
while(i<5)
{
sentence = realloc(sentence, i+2);
scanf("%s", temp);
sentence[i] = malloc(strlen(temp));
strcpy(sentence[i], temp);
printf("%s\n", sentence[i]);
i++;
}
答案 0 :(得分:3)
您忘记了字符串具有空终止符的事实。
答案 1 :(得分:1)
sentence[i] = malloc(strlen(temp));
应该是:
sentence[i] = malloc(strlen(temp)+1);
对于字符串的长度(strlen
) AND ,您的空终止符也需要足够的空间。
答案 2 :(得分:0)
sentence = realloc(sentence, (i+1) * sizeof(*sentence));
会更有意义:您尝试存储i+1
char*
,而不是i+2
字节。
顺便说一句,您可以将malloc / strlen / strcpy替换为:
sentence[i] = strdup(temp);
(为你处理nul终结符)。
答案 3 :(得分:0)
sentence = realloc(sentence, i+2);
是一种常见的反模式。如果realloc返回NULL,那么你刚刚泄露了句子。相反,你需要写
temp = realloc(sentence, i+2);
if(temp == NULL)
// out of memory - do something here
sentence = temp;
为了让生活变得更糟,你正在使用
除了这六个安全漏洞之外,你的表现还不错。