繁体   English   中英

恐惧导致堆溢出

[英]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,缓冲区也是如此,因此那里没有问题。 因此,问题出在您未向我们显示的代码中。 两种可能性:

  1. sizeof_data大于缓冲区,您将覆盖堆栈(或其他数据);

  2. 您希望读取一个字符串,并且不要以'\\ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM