差出人man gets
:
get()は絶対に使用しないでください。事前にデータを知らずにgets()が読み取る文字数を知ることは不可能であり、gets()はバッファの終わりを超えて文字を格納し続けるため、使用するのは非常に危険です。これは、コンピュータのセキュリティを破るために使用されてきました。代わりにfgets()を使用してください。
ほとんどすべての場所で、同じ問題(バッファオーバーフロー/バッファオーバーラン)が発生scanf
するはずの方法で使用されていることがわかります。この場合、この問題は存在しますか?マニュアルページにそれについての参照がないのはなぜですか?これをコンパイルするときにgccが警告しないのはなぜですか?scanf("%s",string)
scanf
-Wall
ps:フォーマット文字列で文字列の最大長をscanf
:で指定する方法があることを私は知っています。
char str[10];
scanf("%9s",str);
編集:私は前のコードが正しいかどうかを判断するように求めていません。私の質問は、もしscanf("%s",string)
常に間違っているのなら、なぜ警告がなく、マニュアルページにそれについて何もないのですか?