ファイル操作と文字列の利用
前回の復習 構造体・共用体の定義 間接メンバ変数参照演算子 (ドット演算子・->演算字)
ファイルの入出力 計算結果や編集した文章をファイルとして保存! FILE型のポインタ(ファイルポインタ) p Disc 注意:関数fopenはファイルが正常に できなかったときはNULLを値として返す
#include <stdio.h>の秘密 stdio.hの中に File *stdin, *stdout, *stderr などとして標準の入出力用のファイルポインタが大域変数として定義されている!
JISコード表(文字型定数)
文字列 文字列のデータ構造 文字列=文字コードの列+’\0’ “Hello” 空文字(ヌルコード) 文字列=文字コードの列+’\0’ ‘H’ ‘e’ ‘l’ ‘o’ ‘\0’ “Hello” 文字列定数はchar型の配列と同じもの → 文字型ポインタとしても表現可能
文字列の配列・ポインタ表現 s: ‘H’ s[0] ‘e’ s[1] ‘l’ . ‘0’ s[4] ‘\0’ s[5] ‘H’ 0010H ‘o’ ‘\0’ 0100H 1 0101H 0102H ps:
よくある間違い ポインタ変数は初期化するか 値を代入する!
ちょっと高級なメモリ領域獲得法 malloc(), free()の利用
複数の文字列の同時定義 st[0][0] ‘A’ st[0] st[0][1] ‘n’ st[0][2] st[0][3] ‘\0’ ? st[1][0] ‘G’ st[1] st[1][1] ‘o’ st[1][2] ‘r’ st[1][3] st[1][4] ‘A’ 0010H ‘n’ 0011H 0012H ‘\0’ 0013H ‘G’ 0014H ‘o’ 0015H ‘r’ 0016H 0017H 0018H 0100H 1 0101H 0102H 4 ps[0]: ps[1]:
文字列領域をキーボード・ディスプレイ(バッファー)として使う sprintf() sscanf()
文字列の操作 良く使う文字列操作関数 関数名と使い方 機能 strcpy(char *s1, char *s2) s1のアドレスにs2が指す文字列をコピーする strcat(char *s2, char *s2) S1の指す文字列の後にs2の指す文字列をコピーする(文字列が結合される)
strcpy・strcatの動き ‘H’ 0010H ‘e’ 0011H ‘l’ 0012H 0013H ‘o’ 0014H ‘\0’ 0101H 0102H 6 0103H 0104H 0105H ‘H’ 0010H ‘e’ 0011H ‘l’ 0012H 0013H ‘o’ 0014H ‘\0’ 0015H ‘w’ 0016H 0017H ‘r’ 0018H 0019H ‘d’ 001AH 001BH buffer[0]: ‘H’ ‘e’ ‘l’ ‘o’ ‘\0’ ‘H’ ‘e’ ‘l’ ‘o’ ‘W’ ‘r’ ‘d’ ‘\0’ 0110H 0111H 0112H 0113H 0114H 0115H 0116H 0117H 0118H 0119H 011AH 011BH word[0]: word[1]:
その他の文字操作関数(1) http://www.cppreference.com/wiki/c/string/start
その他の文字操作関数(2)
大規模プログラムの管理 make + Makefile タブ # Contents of Makefile hello: hello.o func1.o cc -o hello hello.o func1.o hello.o: hello.c cc –c hello.c func1.o: func1.c cc –c func1.c タブ hello.c func1.c >make [Enter] (make –f Makefile [Enter]) hello
プログラムに文字列(パラメータ)を渡す int main(void) ↓ Int main(int argc, char *argc[]) int i; for(i=0;i<argc;i++) printf(“%s\n”, argc[i]); }