“堆栈周围的变量已损坏”错误

时间:2016-04-30 00:24:07

标签: visual-c++

我正在尝试使用fgets读取char值,如下所示:

int main() {
    char m_cityCharCount;

    // Input the number of cities
    fgets(&m_cityCharCount, 4, stdin);
    return 0;
}

Visual Studio在执行代码后返回此错误 - Stack around the variable m_cityCharCount was corrupted

我能做点什么吗?

2 个答案:

答案 0 :(得分:2)

m_cityCharCount是一个char,它最多可以容纳一个char,但是你告诉fgets它是4个字节的缓冲区。即使您只输入了输入键,fgets也会将新行和空终止符存储到缓冲区,这是一个严重的问题。您需要更大的缓冲区来执行fgets

char str[4096];
fgets(str, sizeof str, stdin);

答案 1 :(得分:1)

fgets()的第一个参数是缓冲区上的指针(它的大小应该大于或等于第二个参数。但是sizeof(char)== 1)

\