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++ で定義された文字列のメモリ表現です:
実際には、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には文字列を操作する関数が多数あります:
| 番号 | 関数 & 目的 |
|---|---|
| 1 | strcpy(s1, s2); 文字列 s2 を文字列 s1 にコピーします。 |
| 2 | strcat(s1, s2); 文字列 s2 を文字列 s1 の末尾に連結します。 |
| 3 | strlen(s1); 文字列 s1 の長さを返します。 |
| 4 | strcmp(s1, s2); s1 と s2 が同じ場合は 0 を返し、s1<s2 の場合は 0 より小さい値を返し、s1>s2 の場合は 0 より大きい値を返します。 |
| 5 | strchr(s1, ch); 文字列 s1 内で文字 ch が最初に現れる位置を指すポインタを返します。 |
| 6 | strstr(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標準ライブラリには、文字列関連の関数がさらに多数あります。
その他の拡張