gets()导致内存损坏?

时间:2014-08-22 08:59:22

标签: c++ c

环境:VS2013 express,Windows 7。

源代码非常简单:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int TestNum, k, idx;
    char *strbuf1 = NULL;
    strbuf1 = (char *)malloc(sizeof(char) * 10001);
    if (strbuf1 == NULL){
        printf("memory allocation failed\n");
        return -1;
    }

    gets(strbuf1);
    TestNum = atoi(strbuf1);
    for (k = 0; k < TestNum; k++){
        gets(strbuf1);
        printf("k= %d, strbuf1=%s\n", k, strbuf1);
        //--- read data ---//
        idx = 0;
        while (idx < 5){
            gets(strbuf1);
            idx ++;
        }
    }
    return 0;
}

将代码构建到可执行文件后,比如foo.exe,我用&#34; foo.exe&lt;来测试它。 testinput.txt&#34;在cmd窗口下。它会一路崩溃,但我不知道为什么。有人有线索吗?

我已经上传了&#34; testinput.txt&#34;归档到GDrive,https://docs.google.com/document/d/1d8jBPZfYYjtA9R1CldUZhyRvaAiK5Xk9K-mhE6dIDKU/edit?usp=sharing

1 个答案:

答案 0 :(得分:2)

替换此行:

gets(strbuf1);

使用:

fgets(strbuf1, 10000, stdin);

这是因为fgets具有缓冲区大小的参数以避免溢出,gets没有溢出,因此容易出现缓冲区溢出。