15

バッファオーバーフローのために取得せずにfgetsを使用するように誰もが私に言ったことを知っています。ただし、の3番目のパラメータについて少し混乱していますfgets()。私が理解しているように、fgetsは以下に依存しています。

char * fgets ( char * str, int num, FILE * stream );

char* str入力が保存される場所へのptrです。

num読み取る文字の最大数です。

しかし、何FILE *streamですか?ユーザーに文字列(文など)の入力を求めるだけの場合は、「stdin」と入力するだけでよいですか?

そして、私FILE *stdinは上部、近くに入力する必要がありmain()ますか?

4

4 に答える 4

17

あなたは正しいです。 から返されるような構造体streamへのポインタです。 、、、およびはプログラムに対してすでに定義されているため、自分で開いたり宣言したりする代わりに、直接使用できます。FILEfopenstdinstdoutstderr

たとえば、次のように標準入力から読み取ることができます。

fgets(buffer, 10, stdin);

または、次の特定のファイルから:

FILE *f = fopen("filename.txt", "r");
fgets(buffer, 10, f);
于 2010-01-04T19:36:37.903 に答える
4

はい、を使用する必要がありますstdin。これは、FILE *プログラムの標準入力から読み取る事前定義されたものです。また、ファイルの先頭にがあれば、すでに定義されているはず#include <stdio.h>です(これはに必要ですfgets)。

于 2010-01-04T19:37:24.623 に答える
3

Cでファイルと通信するには、大きく分けて2つの方法があります。1つは、ファイル記述子を処理する、などopen()の低レベルのOS依存システムコールを使用する方法です。もう1つは、上記のようなCライブラリ関数などで使用される構造体を使用することです。read()write()FILEfread()fwrite()

UNIX哲学と同様に、すべてがファイルです。したがって、標準入力()でさえ、構造体stdinへのポインターとして扱われます。FILE

tl; drはい、への呼び出しでを使用stdinする必要がありますFILE* streamfgets()

于 2010-01-04T19:41:39.593 に答える
1

FILEは標準のCファイルです。はい、標準入力から読み取りたい場合は、stdinが正しい記号です。

于 2010-01-04T19:36:48.823 に答える