使用以下c代码段
char charString[1024];
if (fread(charString, sizeof_data, 1, filePointer) != 1){ return false;}
else return true;
如果我提供 sizeof_data = 1024,filePointer指向的文件只有10bytes可以从文件中读取。我从程序中收到Abort信号。
如何优雅地处理它?</ p>
答案 0 :(得分:2)
你说的不是真的:sizeof_data
是1024而缓冲区也是如此,所以没问题。所以问题在于你没有向我们展示的代码。两种可能性:
sizeof_data
大于缓冲区并覆盖堆栈(或其他数据);
您希望读取一个字符串,并且不要使用`\ 0&#39;来终止它。然后你打印它,导致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个。