C 文字列

C言語では、文字列は実際にはヌル文字を使用する\0末尾で終わる一次元文字配列です。したがって、\0は文字列の終わりを示すために使用されます。

ヌル文字(Null character)は終端記号とも呼ばれ、略称はNULであり、値が0の制御文字です。\0はエスケープ文字であり、コンパイラにこれが文字0ではなく、ヌル文字であることを伝えます。

以下の宣言と初期化は、サンプル文字列を作成します。配列の末尾にヌル文字が格納されているため、\0文字配列のサイズは単語サンプルの文字数より1つ多くなります。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

配列の初期化規則に従って、上記の文を次のように書くことができます:

char site[] = "サンプル";

以下は C/C++ で定義された文字列のメモリ表現です:

C/C++ 中的字符串表示

実際には、null文字を文字列定数の末尾に置く必要はありません。Cコンパイラは配列を初期化するときに、自動的に\0を文字列の末尾に置きます。上の文字列を出力してみましょう:

例

#include <stdio.h> int main () { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; printf("サンプル: %s\n", site ); return 0; }

上記のコードがコンパイルおよび実行されると、次の結果が生成されます:

サンプル: サンプル

Cには文字列を操作する関数が多数あります:

番号関数 & 目的
1strcpy(s1, s2);
文字列 s2 を文字列 s1 にコピーします。
2strcat(s1, s2);
文字列 s2 を文字列 s1 の末尾に連結します。
3strlen(s1);
文字列 s1 の長さを返します。
4strcmp(s1, s2);
s1 と s2 が同じ場合は 0 を返し、s1<s2 の場合は 0 より小さい値を返し、s1>s2 の場合は 0 より大きい値を返します。
5strchr(s1, ch);
文字列 s1 内で文字 ch が最初に現れる位置を指すポインタを返します。
6strstr(s1, s2);
文字列 s1 内で文字列 s2 が最初に現れる位置を指すポインタを返します。

以下の例では、上記の関数の一部を使用しています:

例

#include <stdio.h> #include <string.h> int main () { char str1[14] = "サンプル"; char str2[14] = "google"; char str3[14]; int len ; /*str1 を str3 にコピー*/ strcpy(str3, str1); printf("strcpy( str3, str1) : %s\n", str3 ); /*str1 と str2 を連結*/ strcat( str1, str2); printf("strcat( str1, str2): %s\n", str1 ); /*連結後の str1 の全長*/ len = strlen(str1); printf("strlen(str1) : %d\n", len ); return 0; }

上記のコードがコンパイルおよび実行されると、次の結果が生成されます:

strcpy( str3, str1) :  サンプル
strcat( str1, str2):   サンプルgoogle
strlen(str1) :  12

C標準ライブラリには、文字列関連の関数がさらに多数あります。

その他の拡張