gets()関数
901 ワード
gets()とputs()関数:gets()関数の簡単で使いやすく、改行に遭遇するまで行全体の入力を読み出し、改行を破棄し、残りの文字を格納し、これらの文字の末尾に空の文字を追加してC文字列にする.通常はputs関数とペアで使用され、文字列を表示し、末尾に改行文字を追加します.
この関数は、実行時にwarning:this program uses gets()、which is unsafeを生成します.問題は彼の唯一のパラメータwordsで、配列が入力行をインストールできるかどうかをチェックできません.配列名はその配列の手要素のアドレスに変換されるので、get()関数は配列の開始だけを知っていて、配列の中にどれだけの要素があるか分かりません.入力された文字が長すぎると、バッファがオーバーフローします.すなわち、余分な文字が指定されたターゲットスペースを超えています.これらの余分な文字列が未使用のメモリを占有しているだけで、すぐに問題は発生しません.プログラムの他のデータを消去すると、プログラムが異常に中止されます.
#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()関数は配列の開始だけを知っていて、配列の中にどれだけの要素があるか分かりません.入力された文字が長すぎると、バッファがオーバーフローします.すなわち、余分な文字が指定されたターゲットスペースを超えています.これらの余分な文字列が未使用のメモリを占有しているだけで、すぐに問題は発生しません.プログラムの他のデータを消去すると、プログラムが異常に中止されます.