首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >realloc误解

realloc误解
EN

Stack Overflow用户
提问于 2012-03-08 08:15:48
回答 4查看 84关注 0票数 0

谁能给我解释一下,为什么这段代码不能工作。我看了看周围的一些问题,但没有找到答案。可能是因为(巨大的)知识匮乏。

感谢您的帮助。

代码语言:javascript
复制
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++;
}
EN

回答 4

Stack Overflow用户

发布于 2012-03-08 08:17:45

您忘记了字符串有空终止符的事实。

票数 3
EN

Stack Overflow用户

发布于 2012-03-08 08:21:23

代码语言:javascript
复制
sentence[i] = malloc(strlen(temp));

应该是:

代码语言:javascript
复制
sentence[i] = malloc(strlen(temp)+1);

对于字符串(strlen)的长度,都需要足够的空间,对于它的空终止符也需要足够的空间。

票数 1
EN

Stack Overflow用户

发布于 2012-03-08 08:24:02

代码语言:javascript
复制
sentence = realloc(sentence, (i+1) * sizeof(*sentence));

更有意义的是:您正在尝试存储i+1 char*,而不是i+2字节。

顺便说一下,您可以将malloc/strlen/strcpy替换为:

代码语言:javascript
复制
sentence[i] = strdup(temp);

(它会为您处理nul终结器)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9611185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档