1

次のように、ファイルをスキャンしてfscanf、文字列をサイズ 20 の char 配列に入れようとしています。

char buf[20];
fscanf(fp, "%s", buf);

現在、ファイルfpには以下が含まれています: 1 + 23.

次のように、最初の要素へのポインターを設定してbufいます。

char *p;
p = buf;

印刷bufprintf("%s", buf)収量のみ1。インクリメントpして印刷しようとすると、ゴミも印刷されます(p++; printf("%c", *p))。

ここで何が間違ってfscanfいますか?ファイルから文字列全体を読み取らないのはなぜですか?

4

1 に答える 1

7

fscanf(および関連する関数)フォーマット文字列%s」を指定すると、空白を含めずにできるだけ多くの文字を読み取ろうとします。この場合、最初の文字(1)を見つけて保存し、スペースにヒットします( ) であるため、検索を停止します。


行全体を一度に読みたい場合は、 の使用を検討してfgetsください。宛先バッファのサイズを引数の 1 つとして指定する必要があるため、使用する方が安全です。

fgets最大length-of-buffer から 1文字を引いた値 (最後のバイトは末尾のnull-byteのために保存されます) で読み取りを試み、その文字数の読み取りで停止し、改行またはファイルの末尾に到達します。

fgets (buf, 20, fp);

ドキュメントへのリンク

于 2012-07-15T14:35:10.210 に答える