私がfgets()でその使用法を見たように、標準入力はポインタです。
私たちがstdinのために誤って読み書きのために使うので、私は "0"を使いました、そして、fgetsの間にセグメンテーション違反を得ました。
STDINマクロと0は同じです。
標準入力はファイルポインタです。これについて説明してください
回答:
回答№1は1stdin
型の式に展開されるマクロです。 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