[C言語]文字列操作の基本

C言語での文字列操作には「文字列のコピー」「文字列の結合」「文字列の検索」など少し難しいものがあります。

この記事では、C言語での文字列操作の基本について解説します。

文字列長の取得

文字列の長さを取得する場合にはstrlen関数を使用します。

C
// 文字列
char text[] = "Hogehoge";
// 文字列長
int len = strlen(text);

文字列がNULL終端になっていない場合には動作未定義となるため注意が必要です。

文字列の比較

文字列の比較を行う場合にはstrcmp関数を使用します。

C
// 文字列1
char text1[] = "Hoge1";
// 文字列2
char text2[] = "Hoge2";
// 文字列比較
if(strcmp(text1, text2) == 0)
{
    // 文字列一致
}

文字列1及び文字列2がNULL終端になっていない場合には動作未定義となるため注意が必要です。

文字列の複製(コピー)

文字列の複製を行う場合にはstrcpy関数を使用します。

C
// コピー元文字列
char src[] = "Hogehoge";
// コピー先文字列
char dst[9];
// 文字列コピー
strcpy(dst, src);

コピー元文字列がNULL終端になっていない場合やコピー先文字列のサイズが不足している場合にはメモリ破壊が発生する可能性があるため注意が必要です。

文字列の結合

文字列の結合を行う場合にはstrcat関数を使用します。

C
// 文字列1
char text1[11] = "Hoge1";
// 文字列2
char text2[] = "Hoge2";
// 文字列結合
strcat(text1, text2);

文字列1及び文字列2がNULL終端になっていない場合や文字列1のサイズが不足している場合にはメモリ破壊が発生する可能性があるため注意が必要です。

文字の検索

文字の検索を行う場合、先頭から検索する場合にはstrchr関数を、末尾から検索する場合にはstrrchr関数を使用します。

C
// 検索対象文字列
char text = "c:¥¥windows¥¥system32";
// 検索文字
char find = '¥¥';
// 先頭から検索(見つかった場所のアドレスが返る)
char* res1 = strchr(text, find);
// 末尾から検索(見つかった場所のアドレスが返る)
char* res2 = strrchr(text, find);

strchr関数、strrchr関数の実行結果は、検索文字が見つかった場合には見つかった場所のアドレス(検索対象文字列中の)が、見つからなかった場合にはNULLが返ります。

検索対象文字列がNULL終端になっていない場合には動作未定義となるため注意が必要です。

文字列の検索

文字列の検索を行う場合にはstrstr関数を使用します。

C
// 検索対象文字列
char text[] = "abcdefg";
// 検索文字列
char find[] = "cde";
// 検索(見つかった場所のアドレスが返る)
char* res = strstr(text, find);

strstr関数の実行結果は、検索文字列が見つかった場合には見つかった場所のアドレス(検索対象文字列中の)が、見つからなかった場合にはNULLが返ります。

検索対象文字列及び検索文字列がNULL終端になっていない場合には動作未定義となるため注意が必要です。

文字列の分割

文字列の分割を行う場合にはstrtok関数を使用します。

C
// 分割前文字列
char text[] = "1,2,3,4,5";
// 区切り文字列
char s[] = ",";
// 文字列の分割(1度目の実行時には始めの要素の先頭アドレスが返る)
char* res = strtok(text, s);
// 2要素目以降は第一引数を空にしてstrtokを実施
while(res)
{
    res = strtok(NULL, s);
}

分割前文字列及び区切り文字列がNULL終端になっていない場合には動作未定義となるため注意が必要です。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です