プロが教えるわが家の防犯対策術!

上記のとおりとあと特に1行の最大文字数を指定した場合、それを超える文字列をよみこましたときにどんな動作をおこなっているのかをしりたいです

A 回答 (3件)

仕組み、指定した文字数分もしくは、1行の文字列の読み込み。



読み込み文字数を超える文字列を読み込ませても、引数で指定した文字数しか読み込みません。当然文字列にはNULLが入りませんので、NULL終わりの文字列として扱うと、最悪はコアダンプ(異常終了)します。

例)
a.txtに
abcdefg[改行]
[EOF]
と有った場合、
FILE *fp;
char buf[11];
fp=fopen("a.txt", "r");
fgets(buf, 10, fp);

この場合bufの中身は"abcdefg[NULL]"([NULL]はNULL文字)となります。
しかしa.txtの中身が
abcdefghijklmn[改行]
[EOF]
となっていた場合は
bufの中身は"abcdefghij"となります。
文字列の最後にはNULLもじは自動的に付加されませんので、制限を越える文字列を読み込みことが想定されている場合は、
buf[10]='0x00'でNULL文字を付加しましょう。
続きの文字列を読み出した場合、bufの中身は"klmn[NULL]"となります。
    • good
    • 0

fgets()は「指定した文字数より1文字少ない文字数」または「1行分」を読み込み「最後に'\0'を付加して」バッファに設定します。



char str[10] ;
fgets(str, 10, stdin) ; // 1234567890改行 と入力

この場合、strは
'1','2','3','4','5','6','7','8','9','\0'
と設定されます。

残りの入力である'0','\n'は次のfgets()呼び出し時に
'0','\n','\0'
として取得されます。

fgets()の入力結果に'\0'が自動的に付加されるのはANSI-Cの仕様です。
    • good
    • 1

仕組みはほぼ#1の人が書いています。

補足を少し。
それを超えた分の文字列は読み込まれてませんので、
次に読みに行ったときにはそれがよみこまれます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!