[時間割:C言語]『はじめてのC言語完全入門』その12
2009/01/03 04:22 posted by kunkichi
前回からずいぶん時間が経ってしまっているなぁ、、でも新年の誓いも経てたことだし、心機一転がんばります!
金曜日は「C言語」。ファイル入出力の章からです。
はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
posted with amazlet at 08.08.19
塚越 一雄
技術評論社
売り上げランキング: 420963
技術評論社
売り上げランキング: 420963
- stdioライブラリのfopen関数を使用する前提とします。
- fopenはFILE型のポインタを返すので、事前にFILE型のポインタを用意しておくこと。
FILE *fp;
fp = fopen( "sample.txt", "r" ); - 引数はPerl等と同じく、ファイルとモードを指定する。ただし、モードの指定は、”r”, “w”, “a”, “+”の文字列を使用する。意味は推して計るべし。
- fopenは失敗した場合に0を返すのでこれを使ってエラーチェックする。
- ファイルからのデータ読み込みには、ファイルから1文字入力するfgetc関数を使う。fgetcが返すのは、成功した場合は読み込んだ文字を、失敗した場合は-1となる。
- fgetcの返り値は普通に考えればcharだけどintで受ける。これは
- charは1バイトのintとして扱える。ただし、その範囲は符号の有無によって変わる。(符号付きの場合は-128〜127、符号なしの場合は0〜255)
- 全ての文字集合を1バイトで表す場合、成功時は0〜255を返し、-1は失敗を表す。すなわち、-1を表現できる必要がある
- ところがcharの符号有無は実装に依存する。
- charがunsignedの場合は、-1を返した場合に10進数では255と区別ができなくなる。
- charがsignedの場合は、-1を返すことはできるが返せる文字コードの上限が127までとなり、全ての文字集合を表現できない。
従って、charでは役不足なのでintを使うということ。
- fgetcはファイルの終わりに達すると-1を返すので、これを使って、fgetcを-1が返るまでループで回せば全データを取得できる。
while( (c = fgetc(fp)) != -1 ){また-1の代わりに定数EOFを使ってもよい。
printf("%c",c);
} - ファイルのクローズにはfcloseを使う。引数はファイルポインタのみ。
- fopen同様、成功時は0、失敗時は1を返す。読み込みだけの場合はfclose時のチェックは不要だけど、書き込みの場合は、チェックした方が良い。
ここまでの内容をサンプルで書くとこんな感じに成りました。単にファイルを開いて出力するだけです。
#include <stdio.h>
#define FILENAME "./sample.txt"
int main()
{
FILE *fp;
if( !(fp = fopen( FILENAME, "r" )) ){
printf("cannot open input file.\n");
return 255;
}
int c;
while( (c = fgetc(fp)) != EOF ){
printf("%c",c);
}
if( fclose(fp) ){
printf("cannot close input file.\n");
return 255;
}
return 0;
}
出力時はprintfを使っているけど、putcharとか、他にもあるようです。
とりあえず今日はファイルからの入力まで。次はファイルへの出力をやります。






コメント&トラックバック
トラックバックURL: