[英]fread leads to heap overflow
使用下面的C代码段
char charString[1024];
if (fread(charString, sizeof_data, 1, filePointer) != 1){ return false;}
else return true;
如果我提供sizeof_data = 1024并且filePointer指向的文件只有10个字节可以从文件读取。 我从程序收到中止信号。
如何优雅地处理它?
您所说的可能不正确: sizeof_data
为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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.