トップページ > コンテンツ > プログラミング入門 > C言語入門 > C文字列操作

文字列を辞書式の順序で比較する:
strcmp
例:strcmp("sample","test");
返り値 = 0 → 同じ文字, 
返り値 < 0 → 1つ目の引数は2つ目の引数より小さい, 
返り値 > 0 → 1つ目の引数は2つ目の引数より大きい
ワイルドカードなどを含む場合の文字列比較は
http://katsura-kotonoha.sakura.ne.jp/prog/c/tip00003.shtmlを参考に。

文字列を連結:
strcat
例:strcat("sample","s");
返り値:1つ目の引数+2つ目の引数。この場合samples

文字列から文字列を探す:
strstr
例:strstr("sample","am");
返り値:2つ目の引数に指定した文字が最初にあらわれたポインタを返す。上記の場合、"ample"の最初のポインタに
相当する。

文字列の長さ:
strlen
例:strlen("sample");
返り値:文字列の長さを返す。上記の場合6が返り値。CとかC++みたいに\0は考慮した気がするが気のせいだったようだw

文字列表現を返す:(キャスト等も参照のこと)
itoa
例:char test[10];
int n = 777;
itoa(n,test,10);
返り値:int型である引数の文字列表現が返る。つまり"777"みたいなもの。

sprintf
例:char test[10];
int n = 777;
sprintf(test,"%d",n);
返り値:int型である引数の文字列表現が返る。つまり"777"みたいなもの。

文字列を分割する:
strtok
例:char *tok;
char sample[] = "sample";
char test[] = "am";
tok = strtok(sample,test);
while(tok != NULL) {
   puts(tok);
   tok = strtok(NULL,test);
}
返り値:分割された文字列。上記の場合、sとpleが標準出力に出力される。

文字列の一部を切り取る:
javaのsubstringに相当する標準関数はCには無い。
そこで、strncpyやsprintf等で代用する。
例:char sample[] = "sample";
char test[3];
strncpy(test,sample+3,3);
返り値:strncpyでsampleのアドレスをずらしてコピーされた文字。上記の場合ple。

文字列をコピーする:
strcpy,strncpy
例:sample[] = "abcd";
strcpy(sample,"test");
返り値:第2引数で指定されたポインタ。上記の場合、sample変数には"test"という文字が入る。
備考:
strcpy_s,strncpy_sを推奨するエラーがよく出るが、strcpy,strncpyとは微妙に振る舞いが違うらしい。
また、バッファサイズを超えたときに無効となってしまうため、
char buf[5];
strncpy_s(buf,5,"5mojiijou",5);
はNULL終端文字を格納できないため、無効エラーとなる。
したがって、strncpy_s(buf,5,"5mojiijou",4)とするか、strncpy_s(buf,5,"5mojiijou",_TRUNCATE);
と切り捨て処理をしなければならない。

最終更新:2011年04月02日 16:26