fgets()での使用法を見たように、stdinはポインターですか?
stdin に対して誤って読み取りまたは書き込みに使用する '0' を使用し、fgets 中に segfault を取得しました。
STDIN マクロと 0 は同じです。
stdin はファイル ポインタです。これについて説明してください
stdin はFILE *
from ですstdio.h
STDIN_FILENO == fileno(stdin)
STDIN_FILENO
にあり、unistd.h
のようなwrite
関数に使用されますが、 File * としての stdin は次のような stdio 関数に使用されますprintf
stdin
型の式に展開されるマクロですFILE *
(つまり、ポインタです)。その値は指定されていませんが、具体的なオブジェクトを指す必要があるため、NULL ではないことは間違いありません。
0
整数定数であり、ポインタ コンテキストで使用されると NULL ポインタに変換されます。ということになりますstdin != 0
。
STDIN
標準 C ライブラリでは定義されていません。
に対応するOS レベルのファイル記述子stdin
の値が 0 であると聞いたことがあるかもしれませんが、これは本当ですが、ファイル記述子とFILE
オブジェクトは同じものではなく、同じ意味で使用することはできません。(Unixy システムを使用している場合は、いつか読んでください/usr/include/stdio.h
。それは「単なる」C です。通常はFILE
、かなり複雑な としてオブジェクトの具体的な定義がありますがstruct
、これは標準では要求されていません。)