-3

fgets()での使用法を見たように、stdinはポインターですか?

stdin に対して誤って読み取りまたは書き込みに使用する '0' を使用し、fgets 中に segfault を取得しました。

STDIN マクロと 0 は同じです。

stdin はファイル ポインタです。これについて説明してください

4

2 に答える 2

3

stdin はFILE *from ですstdio.h

STDIN_FILENO == fileno(stdin)

STDIN_FILENOにあり、unistd.hのようなwrite関数に使用されますが、 File * としての stdin は次のような stdio 関数に使用されますprintf

于 2013-09-26T01:31:40.093 に答える
1

stdin型の式に展開されるマクロですFILE *(つまり、ポインタです)。その値は指定されていませんが、具体的なオブジェクトを指す必要があるため、NULL ではないことは間違いありません。
0整数定数であり、ポインタ コンテキストで使用されると NULL ポインタに変換されます。ということになりますstdin != 0
STDIN標準 C ライブラリでは定義されていません。

に対応するOS レベルのファイル記述子stdinの値が 0 であると聞いたことがあるかもしれませんが、これは本当ですが、ファイル記述子とFILEオブジェクトは同じものではなく、同じ意味で使用することはできません。(Unixy システムを使用している場合は、いつか読んでください/usr/include/stdio.h。それは「単なる」C です。通常はFILE、かなり複雑な としてオブジェクトの具体的な定義がありますがstruct、これは標準では要求されていません。)

于 2013-09-26T01:39:47.893 に答える