C言語 文字列: 宣言・初期化・入出力をマスターする
C言語 文字列
このチュートリアルでは、C言語文字列の基礎である宣言、初期化、入出力、関数での使用、ポインタ、主要ライブラリ関数を解説します。
C言語では、文字列はヌルバイト\0で終端される文字配列です。例:
char c[] = "c string";
コンパイラは文字列リテラルに自動的に\0を付加し、正しいC文字列にします。

文字列の宣言方法
文字列は文字配列として宣言します。例:
char s[5];

これは最大4文字と終端の\0を保持できるバッファを宣言します。
文字列の初期化方法
複数の初期化スタイルがあります:
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};

バッファオーバーフローに注意:char c[5] = "abcde";は6文字(\0含む)を5バイト配列に格納しようとするため避けるべきです。
文字列への値の代入
配列は宣言後の代入ができません。代わりにstrcpy()を使用します:
char c[100];
strcpy(c, "C programming");
注意: c = "C programming";のような直接代入はコンパイルエラーになります。
ユーザーからの文字列入力
空白区切りの入力にはscanf()を使用:
#include <stdio.h>
int main() {
char name[20];
printf("Enter name: ");
scanf("%s", name);
printf("Your name is %s.", name);
return 0;
}
出力
Enter name: Dennis Ritchie Your name is Dennis.
scanf()は空白で停止するため最初の単語だけ取得されます。配列名はポインタに退化するため、nameを直接渡せます。
行全体を読むには?
fgets()とputs()を使用:
#include <stdio.h>
int main() {
char name[30];
printf("Enter name: ");
fgets(name, sizeof(name), stdin);
printf("Name: ");
puts(name);
return 0;
}
出力
Enter name: Tom Hanks Name: Tom Hanks
fgets()はsizeof(name)-1文字まで(スペース含む)読み取り、末尾の改行も保持します。puts()はそれを出力します。
注意: gets()はバッファオーバーフローの危険があるため、C標準から削除されています。
関数への文字列渡し
文字列は配列と同様に関数に渡せます。例:
#include <stdio.h>
void displayString(char str[]);
int main() {
char str[50];
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
displayString(str);
return 0;
}
void displayString(char str[]) {
printf("String Output: ");
puts(str);
}
文字列とポインタ
文字列名はポインタに退化し、ポインタ演算が可能:
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // H
printf("%c", *(name+1)); // a
printf("%c", *(name+7)); // o
char *namePtr = name;
printf("%c", *namePtr); // H
printf("%c", *(namePtr+1)); // a
printf("%c", *(namePtr+7)); // o
}
よく使われる文字列関数
- strlen() – 文字列長を返す(ヌル終端文字除く)。
- strcpy() – 文字列を別の文字列にコピー。
- strcmp() – 2文字列を辞書順で比較。
- strcat() – 2文字列を連結。
C言語
- C# 文字列をマスターする:基礎、操作、高度なテクニック
- C#名前空間完全ガイド:構成、スコープ、ベストプラクティス
- C++配列を関数に渡す完全ガイド:1次元・多次元配列の実例付き
- C言語演算子完全ガイド:算術・関係・論理・ビット演算子
- C++文字列関数をマスター:strcpy、strcat、strlen、strcmpの実践例
- C 言語の文字列をマスター: 宣言、入力、出力、ライブラリ関数
- Cプログラミング入門:初心者向け包括チュートリアル
- Python文字列操作マスター:replace、join、split、reverse、大文字小文字変換
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
- Java Stringクラス完全ガイド:生成、操作、主要メソッド46選