回答編集履歴

1

誤字の修正

2022/01/24 09:18

投稿

majiponi
majiponi

スコア1720

test CHANGED
@@ -1,2 +1,2 @@
1
- Fukushima\n という文字列をfgetsで読み込ませたとき、最初の読み込みでは、Fukushima\0 がバッファに入り、\n は読み込まれません。なぜなら、\nを読み込もうとすると、\nで文字列を終端させることができないからです。これがfgets関数の仕様です。
1
+ Fukushima\n という文字列をfgetsで読み込ませたとき、最初の読み込みでは、Fukushima\0 がバッファに入り、\n は読み込まれません。なぜなら、\nを読み込もうとすると、\0で文字列を終端させることができないからです。これがfgets関数の仕様です。
2
2
  今回の場合では、start[11以上]であれば、バッファは足ります。が、よりきちんと、堅牢なプログラムを書くのであれば、無批判に```start[strlen(start)-1]='¥0';```と書くのではなく、「文字列の長さが1以上か判定し、そうであり、かつ、文字列の最後の文字が改行コードであればそれを削除する。改行コードがなければ長すぎる文字列が入力されているので、エラーとして扱い、改行コードが現れるかEOFになるかエラーになるまで、必要なだけ文字列を空読みする」など、ありうるパターンを細かく想定すべきでしょう。