【发布时间】:2016-01-21 15:14:36
【问题描述】:
我是 C 的新手,我正在尝试计算动态内存分配以从文件中读取。至少我认为这就是我正在做的事情。
无论如何,这段代码有效:
int readfromfile(FILE *filepointer)
{
size_t size = 2;
char *str = (char *) malloc(sizeof(char));
int character = 0;
size_t counter = 0;
while((character = fgetc(filepointer)) != EOF)
{
str = (char *) realloc(str, size);
str[counter] = (char) character;
size ++;
counter++;
}
str[counter] = '\0';
printf("+%s+", str);
free(str);
return 0;
}
而这段代码没有:
int main()
{
char *str = (char *) malloc(sizeof(char));
...
readfromfile(ifpointer, &str);
}
int readfromfile(FILE *filepointer, char **str)
{
size_t size = 2;
int character = 0;
size_t counter = 0;
while((character = fgetc(filepointer)) != EOF)
{
*str = (char *) realloc(*str, size);
*str[counter] = (char) character;
size ++;
counter++;
}
str[counter] = '\0';
printf("+%s+", *str);
free(str);
return 0;
}
我不明白为什么,因为据我所知,我正在向函数发送指向 char 数组位置的指针并每次都访问数据。编译器没有显示错误消息,它只是循环一次,并且在每次realloc 之后的第二个循环崩溃。分配给第一个值的字符也是垃圾。
我花了很长时间试图让它发挥作用并进行了大量研究,所以如果我错过了解决方案,我深表歉意,但我真的被困在这一点上。
【问题讨论】:
-
从不转换 malloc 的结果。
-
它会在添加更多字符时重新分配内存,但不是吗?至于释放内存,我的道歉只是为了检查它是否已被释放,现在被删除了。
-
你不需要为
malloc添加演员 -
@JJJ,是的,我没有看到
realloc部分,抱歉。
标签: c arrays function char dynamic-memory-allocation