Fgets、gets、fputs、puts

  

どちらの関数も一度に1行ずつ入力することができます。ただし、getsは廃止予定の関数であるため、getsを使用してバッファの長さを指定できないため、バッファがオーバーフローする可能性があります。標準入力(stdin)しか操作できないという事実に加えて、getsとfgetsの間にはもう1つの違いがあります。 - mdash; getsは改行文字をバッファに読み込まない。たとえば、' abcde \\ n'と入力してから、取得時に' \\ n'ではなく、バッファに' abcde'のみを使用します。対照的に、fgetsは' abcde \\ n&nによって完全に読み込まれます。
それに対応して、putは通常getと対になって使用されるので、出力はNULLで終わる文字列を出力し(NULLは出力しません)、また標準出力に改行を出力します。
プログラム1:
char buf [BUFSIZE];
while(fgets(buf、BUFSIZE、stdin)!= NULL)
if(fputs() Buf、stdout)== EOF)
printf(" output error!\\ n");
出力:
結論:fgetsとfputsは通常どおりに動作します。
分析:入力' abcdef \\ n< abcdef \\ n>でバッファに読み込まれたファイルの場合、fputsはバッファから出力を取得します。
プログラム2:
char buf [BUFSIZE];
while(gets(buf)!= NULL)
if(puts(buf)== EOF)
printf(" outputエラー:\\ n");
出力:
結論:getとputの組み合わせは通常どおり動作します。分析:入力< abcdef \\ n'>を入力し、' abcdef'をバッファーに読み込みます(注: ’ \\ n’)を読み込まないでください。putsはバッファから出力を取得してから、改行(‘ \\ n’)を標準出力に出力します。 Putsは改行文字を追加します。
プログラム3:
char buf [BUFSIZE];
while(gets(buf)!= NULL)
if(fputs(buf、stdout)== EOF)
printf("); output error!\\ n");
出力:
結論:getsとfputsの組み合わせが正しく機能しません。分析:入力< abcdef> \\ n'がバッファに読み込まれ、' abcdef'が返されます。 (注:’ \\ n’を読み込まないでください)fputsは "(改行を追加せずに)バッファから出力を取得します。次の行の入力は前の出力と同じ行になり、結果として出力されます。入力より1つ少ない改行。
プログラム4:
char buf [BUFSIZE];
while(fgets(buf、BUFSIZE、stdin)!= NULL)
if(puts(buf)== EOF)
printf (" output error!\\ n");
出力:
結論:fgetsとputの組み合わせは正しく機能しません。
分析:入力' abcdef \\ n'、fgetsが' abcdef \\ n'に読み込まれました。バッファでは、putsはバッファから出力を取得し(すでに改行があります)、次に改行を出力します。その結果、出力には入力よりも改行が1つ増えます(2つの改行を出力します)。 )

概要:fgetsのとfputsを使用しようとする必要があり、一方では比較的安全であるが、入力と出力の2つの無傷一方で、改行に対処するために覚えておく必要はありません。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved