Cでは、宣言時に長さを与えることができる配列があることを理解しています。それらの長さの宣言が他のプログラマーにとって、単に文字のバッファ長以上の読み込みを禁止することによってコードを保護するためにコンパイラを作成できるかどうかを知りたいのです。私が文字列を読み込むと、それは単に続行され、読み込みたいバッファの後に宣言された変数に格納されたデータを上書きし始めます。安全にデータを読み込む方法はありますか?Cはバッファオーバーフローをどのように扱いますか?
char arr[5];
char buff[5] = "cat";
printf("The buffer holds: %s\n", buff);
printf("Input a word to be held in \"arr\": ");
scanf("%s", arr);
printf("The array holds: %s\n", arr);
printf("The buffer holds: %s\n", buff);
printf("%c\n", arr[9]);
編曲に読み込ま文字列が十分に長い場合は、「猫」は上書きされ、コンパイルフラグのどれもが何かをするように見えるん(私がコンパイル-Wextra -Wall -Werror -std = C99)のみ不平を言うのはバングラドです。 Cで安全な配列コードを書くにはどうすればよいですか?
あなたは規律ある方法で行動します。 'C'標準は、コンパイラベンダーがあなたを守る義務がないことを指定しています。境界からの書き込みは、未定義の動作です。 – StoryTeller
'-O2'を追加しましたか? –
lm gt fy ... 'safe scanf' –