【发布时间】:2022-01-22 09:09:57
【问题描述】:
char* scanString(FILE* fp, unsigned int size)
{
char* str;
int Char;
unsigned int len = 0;
str = (char*)realloc(NULL, size);
if (str == NULL)
return str;
while (EOF != (Char = fgetc(fp)) && Char != '\n')
{
str[len++] = Char;
if (len == size)
{
size = size + 16;
str = (char*)realloc(str, size);
if (!str)return str;
}
}
str[len++] = '\0';
return (char*)realloc(str, len);
}
我使用这个函数来扫描未知大小的字符串,当我在没有循环的主函数中使用它时,一切正常。 但是当我试图在另一个函数中使用它时,程序就停止了,我该怎么办?
【问题讨论】:
-
您应该附加一个调试器以至少知道段错误发生在哪一行。此外,如果返回 null,则会泄漏:
str = (char*)realloc(str, size); -
不要解释“当我尝试使用另一个函数时”,而是向我们展示您编写的实际代码,当您尝试运行它时会停止。
-
提示:
str = (char*)realloc(str, size); if (!str)return str;在realloc返回NULL时会泄漏内存。 -
你传递的
size是什么? -
提示:
size参数的意义何在?
标签: c string pointers char realloc