

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
はじめに
このページでは getc について、初心者にも分かりやすく解説します。プログラミングを始めたばかりの人が文字を read する仕組みを理解するのに役立つ基本的な内容です。難しい専門用語を避け、実生活の例に置き換えながら説明します。
getc とは何か
getc は C 言語の標準ライブラリの一部で、ファイルから 1 文字ずつ読み取るための関数です。読み取りの対象はファイルポインタを指す FILE 型の streams です。返り値は int 型 で、読み取った文字を 0 〜 255 の範囲の値として返します。終端に達した場合やエラーが起きた場合には EOF を返します。なお、EOF は整数値であるため結果を char 型に直接代入するのではなく int 型の変数に格納するのが基本です。
getc の使い方の基本
使い方はとてもシンプルです。関数の宣言は次のようになります。int getc(FILE *stream)。stream には読み取りたいファイルのポインタを渡します。代表的な使い方は、ファイルを開いてから 1 文字ずつ読み取り、終端まで処理を繰り返すパターンです。
例を言葉で説明します。まずファイルを開き、失敗したら処理を終えます。成功したら getc で 1 文字ずつ読み取り、EOF になるまで繰り返します。読み取った文字はそのまま別の処理へ回します。最後にファイルを閉じます。
実際の流れをつかむポイントは次のとおりです。返り値が EOF かどうかでループを終えること、そして ファイルを必ず閉じる ことです。これを守らないと資源が解放されず、他の処理に影響することがあります。
getc の他の読み取り関数との違い
C 言語には似たような関数がいくつかあります。主なものを比較表で見てみましょう。
| 関数 | 読み取り元 | 返り値 | 備考 |
|---|---|---|---|
| getc | 任意の FILE* | int | fgetc の別名として実装されていることがある |
| fgetc | 任意の FILE* | int | 標準的な読み取り関数 |
| getchar | 標準入力 | int | stdin からの読み取り専用 |
この中で getc は実装次第でマクロとして展開されることもあり、高速に動作する場合がある一方、関数としての fgetc の方が移植性が高い場合があります。どちらを使うかは、目的とコンパイル環境に合わせて選ぶとよいでしょう。
実用的なヒントと注意点
いくつかの実用的なポイントをまとめます。まず、EOF は 常に int 型の変数に格納 します。char 型へ直接代入すると負の値が表現できず、EOF と混同してしまうことがあります。次に、ファイルを開いた後は必ず閉じること。開いたファイルを閉じないとリソースが不足し、プログラム全体の動作が不安定になります。さらに、入出力のエラーチェックを行うことも大切です。ファイルの読み取りに失敗したり、読み取り中にエラーが起きたりした場合の処理を用意しておきましょう。
まとめ
本記事の要点は次のとおりです。getc はファイルから 1 文字を読み取る基本的な手段であり、fgetc とほぼ同じ動作をするが実装の違いで使い分けることがあるという点です。使い方はシンプルですが、EOF の扱い、ファイルの開閉、エラーチェックを丁寧に行うことが大切です。中学生でも理解できるように要点を押さえ、ゆっくり練習すれば、文字データを扱う基礎が自然と身についていきます。
注意:ここで紹介している内容は C 言語の標準ライブラリの基本です。実際のプログラムを書くときには、必ず自分の開発環境の仕様書やコンパイラのドキュメントを確認してください。getcの同意語
- fgetc
- ファイルストリーム(FILE*)から1文字を取得する標準ライブラリ関数。getcと同等の機能を持ち、引数は FILE* です。
- getchar
- 標準入力(stdin)から1文字を取得する関数。getc/fgetc の標準入力向けの別名として使われます。
- getchar_unlocked
- 標準入力から1文字をロックなしで取得する高速版。スレッド安全性は低下しますが、同じ意味の関数と考えられます。
- fgetc_unlocked
- ファイルストリームから1文字をロックなしで取得する高速版。getc_unlockedのファイル版とも言える機能。
- getc_unlocked
- ファイルストリームから1文字をロックなしで取得する高速版。getcと同等の機能を、ロックを外すことで高速化します。
getcの対義語・反対語
- putc
- getcはファイルや標準入力から1文字を読み取る関数。対になるのは文字を書き込む動作を担うputcで、ファイルストリームへ1文字を送る役割です。
- putchar
- putcharは標準出力へ1文字を出力する関数。読み取りのgetcの反対として、出力のイメージを持つ代表的な関数です。
- fputc
- fputcはファイルストリームへ1文字を書き込む関数。getcの"書き込み版"としての対義語。
- ungetc
- ungetcは、すでに読んだ文字を入力ストリームに戻す機能。getcの操作を取り消す、逆方向の操作として使われます。
- read
- POSIXの低レベルの読み取り関数。getcは単一バイトの読み取り、readは複数バイトを読み取るのが基本。対義語として捉えると読み取りの反対概念。
- write
- POSIXの低レベルの書き込み関数。getcが読み取り、writeは書き込み、対になる動作です。
- 入力
- 情報を受け取る動作を表す一般語。getcの動作が“入力から読む”ことに対し、反対語としては“出力・送出・送信”などが挙げられます。
- 出力
- 情報を外部へ送る動作を表す語。getcの読み取りに対しての反対の意味です。
getcの共起語
- stdio.h
- getcの宣言があるCの標準ライブラリヘッダファイル。
- FILE
- ファイルやストリームを表すデータ型。getcはこの型のストリームから読み取ります。
- stdin
- 標準入力を表すストリーム。入力元のデフォルト。
- fgetc
- getcと同じ機能を持つ別名の関数。ストリームから1文字を読み取る。
- getc_unlocked
- 高速版のgetc。スレッドセーフでない場合が多いが高速。
- getchar
- 標準入力から1文字を読み取る便利関数。getc(stdin)と同等で使われることが多い。
- EOF
- ファイルの終端または読み込みエラーを示す特別な返り値。
- 1文字
- getcは1文字ずつ読み取る操作です。
- ストリーム
- データの入出力を抽象化した概念。getcはストリームからデータを読み取ります。
- ファイル
- 入力元としてのファイル。ストリームを介して扱われます。
- 読み込み
- データを外部ソースから取り込む操作。
- 戻り値
- 読み取った文字をint型で返します。末尾はEOFか有効な文字コードの値。
- 文字コード
- 読み取った文字のコード値。通常0〜255程度を返します。
- ungetc
- 直前に読み取った文字をストリームに戻す機能。getcと組み合わせて使われることがあります。
- POSIX
- getc_unlockedなど、POSIX準拠の拡張と関連します。
- マクロ
- 実装によってはgetcがマクロとして定義されていることがあります。
- 仕様
- C言語の標準ライブラリの仕様。ISO/IEC 9899に準拠します。
- エラー
- 入出力エラー時にはEOFが返ることがあります。
getcの関連用語
- getc
- C言語の標準ライブラリにある1文字読み取り関数。FILE* から1文字を読み取り int 型で返し、末尾やエラー時には EOF を返します。getc は fgetc のマクロ版として実装されることが多く、環境によって展開が異なる場合があります。
- fgetc
- getc と同等の機能を持つ関数。正式には関数として提供され、FILE* から1文字を読み取り int を返します。ストリームの状態によって結果が変わります。
- getchar
- stdin から1文字を読み取る便利関数。戻り値は int。EOF の判定が可能で、ファイルポインタを渡す必要がありません。
- getchar_unlocked
- 標準の getchar の高速版で、スレッド安全性が保証されない代わりに高速に動作します。GNU系の環境で用いられます。
- getc_unlocked
- getc の unlocked 版。マルチスレッド環境では注意が必要ですが、単一スレッドの状況で高速化できます。
- ungetc
- 1文字をストリームに戻す関数。直前に読んだ文字を再読できるよう、ストリームのバッファに文字を戻します。
- EOF
- ファイル終端またはエラーを表す特別な返値。int 型で返され、他の有効な文字コードと区別して扱います。
- FILE
- ファイルストリームを表すデータ型。C標準ライブラリの入出力操作で用いられます。
- stdin
- 標準入力を表す FILE*。キーボード入力やパイプ経由の入力を受け取るストリームです。
- stdout
- 標準出力を表す FILE*。画面表示やパイプへの出力に使われます。
- stderr
- 標準エラー出力を表す FILE*。エラーメッセージの出力先として使われます。
- stdio.h
- stdio.h ヘッダファイル。getc, fgetc, getchar などの標準入出力関数の宣言が含まれています。
- feof
- ファイルの終端に到達したかどうかを調べる関数。読み取り後に feof が true になるかを確認します。
- ferror
- ストリームの読み取り中にエラーが発生したかどうかを調べる関数。エラー時には true を返します。
- バッファリング
- I/O は通常バッファを介して行われ、getc 系関数はバッファから文字を取り出して効率を高めます。
- テキストモードとバイナリモード
- ファイルをテキストモードかバイナリモードで開くと、改行コードの変換など挙動が異なります。getc は両方のモードで使用可能ですが環境依存の挙動に注意します。
- 文字コードとエンコーディング
- getc で返されるのは1バイト分の文字コード。UTF-8 等の多バイト文字を扱う場合は複数回の読み取りが必要なことがあります。
- 使い方の基本
- 典型的な使い方は while ((c = getc(fp)) != EOF) { /* 文字処理 */ } です。EOF の判定とエラーチェック feof / ferror も併用します。



















