/ / stdin、0、STDINは違うものです - c、unix

stdinは0です、STDINは別のものです - c、unix

私がfgets()でその使用法を見たように、標準入力はポインタです。

私たちがstdinのために誤って読み書きのために使うので、私は "0"を使いました、そして、fgetsの間にセグメンテーション違反を得ました。

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

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

回答:

回答№1は1

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

OSレベルだと聞いたことがあるかもしれません ファイル記述子 対応する stdin 値0を持ちます。これはtrueですが、ファイル記述子と FILE オブジェクトは同じものではなく、互換的に使用することはできません。 (Unix系のシステムを使っているのなら、 /usr/include/stdio.h いつか。それはもっと "C"です。通常の具体的な定義があります FILE かなり複雑なので、そこにオブジェクト structこれは規格では要求されていませんが)


回答№2の場合は3

stdinは FILE * から stdio.h

STDIN_FILENO == fileno(stdin)

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