C言語の文字列:ヌル終端文字配列の仕組み
文字列の仕組み
文字列は実際にはヌル文字'\0'で終端される1次元の文字配列です。したがって、ヌル終端文字列には文字列を構成する文字に続けてヌルが含まれます。
以下の宣言と初期化は"Hello"という単語で構成される文字列を作成します。配列の末尾にヌル文字を保持するため、文字列"Hello"の文字数より1つ大きいサイズの文字配列になります。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
配列初期化のルールに従うと、上記文は以下のようにも書けます:
char greeting[] = "Hello";
上記で定義された文字列のC/C++でのメモリ表現:
実際には、文字列定数の末尾にヌル文字を置く必要はありません。Cコンパイラは配列を初期化する際、自動的に末尾に'\0'を配置します。上記文字列を出力してみましょう:
Live Demo#include <stdio.h>
int main() {
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("Greeting message: %s\n", greeting);
return 0;
}
実行結果:
Greeting message: Hello
文字列操作関数
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が最初に出現する位置へのポインタを返す。 |
上記関数のいくつかを使用する例:
Live Demo#include <stdio.h>
#include <string.h>
int main() {
char str1[12] = "Hello";
char str2[12] = "World";
char str3[12];
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) : Hello strcat(str1, str2): HelloWorld strlen(str1) : 10
C言語
- C# 文字列をマスターする:基礎、操作、高度なテクニック
- C++文字列関数をマスター:strcpy、strcat、strlen、strcmpの実践例
- C 言語の文字列をマスター: 宣言、入力、出力、ライブラリ関数
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- Python文字列操作マスター:replace、join、split、reverse、大文字小文字変換
- Python str.count()マスター:文字と部分文字列のカウント実例集
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き
- Java Stringクラス完全ガイド:生成、操作、主要メソッド46選