2016-04-30 3 views
1

私は次のように関数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

です私はそれについて何かできることがありますか?

+0

サイズは変更のない4例、Cで1:'チャーm_cityCharCount [16];関数fgets(m_cityCharCountのsizeof m_cityCharCount、STDIN); 'は – BLUEPIXY

+1

' fgets'を読み取るように意図されているゼロで終了します*文字列*。単一の 'char'を受信側バッファーとして使用しています。これは空のゼロ終端文字列で十分です。それをしながら、あなたはその '4'で' fgets'に嘘をついています。受信者バッファは、 '4'ではなく '1'''char'のみで構成されます。 – AnT

答えて

1

char` `の
int main() { 
    char m_cityCharCount[4]; 

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

m_cityCharCountは、最大で1つの文字を保持できますが、fgetsは4バイトのバッファです。何も入力せずにEnterキーを押しても、fgetsは新しい行とヌルターミネータをバッファに保存しますが、原因は深刻な問題です。あなたがfgetsを行うには大きなバッファが必要になります(それのサイズは素晴らしいことか、二番目のパラメータよりも、等しくなければならない。しかしはsizeof(文字)== 1)バッファ上のポインタである)のfgetsの最初のパラメータ(

char str[4096]; 
fgets(str, sizeof str, stdin); 
関連する問題