http://www.sw.it.aoyama.ac.jp/2015/CP1/lecture12.html
© 2005-15 Martin J. Dürst 青山学院大学
| 11A1 | 11B2 | 11C1 | 11C2 | |
| 100点 | 91 | 84 | 50 | 25 |
| 60点 | 2 | 9 | 42 | 52 |
| 部分点 | - | - | - | 13 |
| エラー | - | - | 1 | 2 |
| 未提出 | 1 | 1 | 1 | 2 |
[昨年度資料につき削除]
| 機能 | 標準入力 (stdin) |
任意のファイル FILE * f |
|---|---|---|
| 準備 | (不要) | f = fopen(name,"r") |
| 一文字入力 | getchar() |
getc(f) 又は
fgetc(f) |
| 一行入力 | gets(s)
fgets(s,l,stdin) |
fgets(s,l,f) |
| 書式つき入力 | scanf(format,...) %s |
fscanf(f,format,...) %s |
| 後片付け | (不要) | fclose(f) |
| 機能 | 標準出力 (stdout) |
任意のファイル FILE *
f |
|---|---|---|
| 準備 | (不要) | f = fopen(name,"w") |
| 一文字出力 | putchar(c) |
putc(c,f) 又は
fputc(c,f) |
| 一行出力 | puts(s) |
fputs(s,f) |
| 書式つき出力 | printf(format,...) |
fprintf(f,format,...) |
| 後片付け | (不要) | fclose(f) |
fflush(f): 出力・出力のバッファを空にするprintf 後に大事)sprintf(s,format,...):
文字列への書式付き「出力」sscanf(s,format,...):
文字列からの書式付き「入力」stderrstdin, stdout と同様に stderr
ファイルが常に用意stderr
への出力にはファイル出力の関数が必要malloc
などの定石でも本来、エラー出力を使用if (!(file=fopen("myfile.txt","w"))) {
fprintf (stderr, "Cannot open file myfile.txt for writing.\n");
exit(1);
}
| 文字 | 青 | 山 | A | o | y | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
Shift_JIS |
8E | 52 | 90 | C2 | 41 | 6F | 79 | |||||
UTF-8 |
E9 | 9D | 92 | E5 | B1 | B1 | 41 | 6F | 79 | |||
UTF-16 (BE) |
97 | 52 | 5C | 71 | 00 | 41 | 00 | 6F | 00 | 79 | ||
iso-2022-jp、電子メールなど)Shift_JIS、Windows PC, MacIntosh)CP932 は SJIS の変形)EUC-JP、Unix 系)世界的な文字集合: Unicode/ISO 10646/JIS X 0221/...
ユニコードの符号化:
UTF-8: US-ASCII と互換性が非常に高いUTF-16: 殆どの文字が16ビットで表現UTF-32: 全ての文字が32ビットを使用gcc での文字コード指定:
-finput-charset=文字コード:
ソースの文字コード-fexec-charset=文字コード:
実行時の文字コード表示に使用される文字コード:
Shift_JIS 系)fopen には "rb", "wb",
"r+b" 等を使う (参考書 p. 318)fseek 関数で変更可能fwrite 関数で書き、fread
関数で読む| テキスト | バイナリ | |
|---|---|---|
| 整数 | 十進数に変更 (数値の大きさによって桁数が違う) |
そのまま |
| 文字列 | '\0' まで |
決まった長さ (ゴミを含む可能性) |
例: fwrite.c
テキストファイル:
cat file.txt で画面に表示バイナリファイル:
od -hc raw.bin 又は hexdump file.bin
で画面に表示fread 関数と fwrite 関数void *
のプログラム内の書き出したい、読み込みたい場所size_t (普通は int) の要素
(レコード、構造体) 1 個の大きさ (バイト)size_t のレコードの数FILE* のファイルポインタfseek または
fflush が必要fwrite (students, sizeof(Student), studentCount,
rawFile);fseek 関数FILE* のファイルポインタlong のゲタ (バイト)int の種類:
SEEK_SET: ゲタはファイルの頭からSEEK_CUR: ゲタは現在位置から
(負も可)SEEK_END: ゲタはファイルの末尾から (0
か負)0、そうでない場合に
EOF