char 配列としての文字列
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 12/63。
C言語では、他のプログラミング言語で見られるような、組み込みの文字列データ型は存在しません。その代わりに、文字列は文字の配列として表現されます。この基本的な概念は、Cプログラミングでテキストがどのように扱われるかを理解するために不可欠です。
Cにおける文字列は、単に連続したメモリ領域に格納された文字の並びです。文字列を作成するには、必要なすべての文字を保持するのに十分な大きさに加え、特別な終端文字のための1文字分の空き領域を確保した文字配列を宣言します。
char greeting[6]; // 5文字 + 終端文字を保持できます
char message[20]; // 最大19文字 + 終端文字を保持できます文字列を扱う最も便利な方法は、配列を宣言するときに文字列リテラルで直接初期化することです。C言語は、配列内の各文字を格納する詳細を自動的に処理します:
char greeting[6] = "Hello";
// これは 'H', 'e', 'l', 'l', 'o' と、特殊な終端文字を格納します文字列リテラルで初期化する際にサイズ指定を省略することで、C言語に配列のサイズを自動的に決定させることもできます:
char greeting[] = "Hello"; // C言語では自動的にサイズが6になります文字列が文字の配列であることを理解することは非常に重要です。なぜなら、それがC言語におけるテキストデータの扱い方を説明し、これらの文字配列を操作する文字列操作関数を使用するための準備となるからです。
チャレンジ
簡単文字列を格納するための文字配列の作成と操作を実演するCプログラムを作成してください。プログラムは以下の要件を満たす必要があります:
- "Hello" という文字列を保持するのに十分なスペースを持つ、
greetingという名前の文字配列を宣言する(ヌル終端文字を考慮することを忘れないでください) greeting配列を文字列リテラル "Hello" で初期化する- 20個の要素を持つ
messageという名前の2つ目の文字配列を宣言する message配列を文字列リテラル "Welcome" で初期化する- サイズを指定せずに
wordという名前の3つ目の文字配列を宣言し、"Programming" で初期化することでCにサイズを自動的に決定させる printfと%sフォーマット指定子を使用して、3つの文字列すべてを表示するsizeofを使用して各配列のサイズを表示し、各文字配列がどれだけのメモリを占有しているかを示す
出力は以下の形式で結果を表示する必要があります:
greeting: Hello
message: Welcome
word: Programming
Size of greeting: 6
Size of message: 20
Size of word: 12このチャレンジでは、文字列を格納するための文字配列の宣言方法、文字配列に割り当てられたときに文字列リテラルがどのように自動的にヌル終端されるか、そして初期化時にサイズ指定を省略したときにCがどのように配列サイズを自動的に計算するかについての理解をテストします。
チートシート
C言語において、文字列は文字の配列として表現されます。組み込みの文字列データ型は存在しません。
指定したサイズで文字配列を宣言します:
char greeting[6]; // 5文字 + 終端文字を格納可能
char message[20]; // 最大19文字 + 終端文字を格納可能文字列リテラルで初期化します:
char greeting[6] = "Hello";
// これは 'H', 'e', 'l', 'l', 'o' と、特別な終端文字を格納しますCに配列のサイズを自動的に決定させます:
char greeting[] = "Hello"; // Cは自動的にこのサイズを6にします%s フォーマット指定子を使用して文字列を出力します:
printf("%s", greeting);sizeof を使用して配列のサイズを取得します:
sizeof(greeting) // 配列が占有する合計バイト数を返します自分で試してみよう
#include <stdio.h>
int main() {
// TODO: ここにコードを書いてください
// チャレンジで指定された通りに文字配列を宣言し、初期化します
// 文字列とそのサイズを出力します
printf("greeting: %s\n", greeting);
printf("message: %s\n", message);
printf("word: %s\n", word);
printf("Size of greeting: %lu\n", sizeof(greeting));
printf("Size of message: %lu\n", sizeof(message));
printf("Size of word: %lu\n", sizeof(word));
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。