使用下面的c代码片段
char charString[1024];
if (fread(charString, sizeof_data, 1, filePointer) != 1){ return false;}
else return true;
如果我提供 sizeof_data = 1024 并且 filePointer 指向的文件只能从文件中读取 10 个字节。我收到来自程序的中止信号。
如何优雅地处理它?</p>
最佳答案
你说的不可能是真的:sizeof_data
是1024,缓冲区也是1024,所以没有问题。所以问题出在你没有向我们展示的代码中。两种可能性:
sizeof_data
大于缓冲区,并且您覆盖了堆栈(或其他数据);您希望读取一个字符串,但不以“\0”终止它,然后打印它,导致 f/s/printf 导致段错误。
试试这个代码:
char charString[1024];
size_t n;
if ((n=fread(charString, 1, (sizeof_data<1024?sizeof_data:1023), filePointer))==0)
return false;
CharString[n]='\0'; // terminate
printf("%s\n",charString); // safe to print now
return true;
请注意,我们要读取字符,因此项目大小为 1,并且我们要读取最多 1023 个字符,因此计数最大为 1024。
关于c - fread 导致堆溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268339/