gets()関数

901 ワード

gets()とputs()関数:gets()関数の簡単で使いやすく、改行に遭遇するまで行全体の入力を読み出し、改行を破棄し、残りの文字を格納し、これらの文字の末尾に空の文字を追加してC文字列にする.通常はputs関数とペアで使用され、文字列を表示し、末尾に改行文字を追加します.  
        #include

        #include

        #define STLEN 81



        int main()

        {

            char words[STLEN];

            puts("enter a string,please");

            gets(words);

            printf("Your string twice :
");             puts(words);             puts("Done");                  return 0;         }

この関数は、実行時にwarning:this program uses gets()、which is unsafeを生成します.問題は彼の唯一のパラメータwordsで、配列が入力行をインストールできるかどうかをチェックできません.配列名はその配列の手要素のアドレスに変換されるので、get()関数は配列の開始だけを知っていて、配列の中にどれだけの要素があるか分かりません.入力された文字が長すぎると、バッファがオーバーフローします.すなわち、余分な文字が指定されたターゲットスペースを超えています.これらの余分な文字列が未使用のメモリを占有しているだけで、すぐに問題は発生しません.プログラムの他のデータを消去すると、プログラムが異常に中止されます.