「文字」の説明の最初に、文字は1文字のことを差し、’(シングルクォーテーション)で囲まれていると書きました。
さらに「文字列」は "(ダブルクォーテーション)で囲まれているとも書きました。
「文字」の説明をするまでは、「文字列」ばかり使っていましたが、ほとんど説明していませんでしたので、細かい説明を書いていきます。
「文字列」は文字の集まりのことで、英語では「character string」と書きます。
「string」単体で「文字列」を指すことも多いので覚えておいてください。
これまでは「文字列」を表示する際に、↓のようにプログラムを書きました。
<sample program 081-01>
#include <stdio.h> int main(void) { printf("文字列の表示\n"); return 0; } |
<実行結果>
文字列の表示 続行するには何かキーを押してください・・・
数値などを表示する時は「%」記号を使って↓のように書きますね。
<sample program 081-02>
#include <stdio.h> int main(void) { printf("value = %d\n", 123); return 0; } |
<実行結果>
value = 123 続行するには何かキーを押してください・・・
よく見ると「"value = %d\n"」の部分は "(ダブルクォーテーション)で囲まれているため「文字列」ですよね。
で、,(コンマ)の後ろにある「数値」の123が、「文字列」の中の「%d」と書いてある場所に表示されています。
簡単に説明すると、printfは「文字列」を表示する命令(関数)です。
「数値」は表示出来ないため、一旦「文字列」に変換して表示を行います。
上の例で言うと、「"value = %d\n"」という文字列を「"value = 123\n"」に変換して表示しています。
「文字」の表示の時に、
<sample program 077-01>
#include <stdio.h> int main(void) { printf('A'); return 0; } |
このプログラムはエラーで動かないと説明しましたが、printfは「文字列」を表示する命令(関数)ですから「文字」は表示出来ないのです。
↓のように "(ダブルクォーテーション)で囲んだ「文字列」であれば1文字しかなくても表示出来ます。
<sample program 077-02>
#include <stdio.h> int main(void) { printf("A"); return 0; } |
<実行結果>
A続行するには何かキーを押してください・・・
「1文字でも文字列」という話は非常に重要です。
1文字の「文字」と1文字の「文字列」は異なります。
それでは、もう少し細かい部分について説明していきましょう。
プログラムを実行しながら進めていきます。
まずは「文字列」を入れる変数のことを考えます。
「文字」はchar型変数に入れることが出来ました。
「文字列」は「文字」の集合体ですから、char型の配列を使うことで変数に入れることが出来ます。
サンプルプログラムを書きます。
<sample program 081-03>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING]; return 0; } |
配列ですので、#defineを使って最大文字数を定義しました。
最大文字数は10ですので「文字」が10個入れられそうです。
(↑これ大事です!この言葉覚えておいてください)
まだ何も「文字」が設定されていませんので、設定方法について説明します。
「文字列」は配列ですから、配列で出来たことは大体同じように出来ます。
逆に配列に出来ないものは「文字列」でも出来ません。
まず最初は初期値として「文字列」を設定しましょう。
<sample program 081-04>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING] = "Hello"; return 0; } |
配列名の「str」は「string」の略です。
配列の初期値は{ }を使って、データを1つずつコンマ区切りで入れていましたが、文字列は "(ダブルクォーテーション)で設定することが出来ます。
実行しても何も表示されませんので、表示するプログラムを追加します。
<sample program 081-05>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING] = "Hello"; printf(str); return 0; } |
<実行結果>
Hello続行するには何かキーを押してください・・・
「str」は「文字列」ですので、printfでそのまま表示することが出来ます。
改行が含まれていませんでしたので、初期値に改行を追加してみます。
<sample program 081-06>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING] = "Hello\n"; printf(str); return 0; } |
<実行結果>
Hello 続行するには何かキーを押してください・・・
上手く改行出来ました。
が、データの中に改行が入っているのは好ましくありません。
改行は表示上の問題ですので、データとは関係無いものです。
そこで、新しい書き方を説明します。
<sample program 081-07>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING] = "Hello"; printf("%s\n", str); return 0; } |
<実行結果>
Hello 続行するには何かキーを押してください・・・
「文字列」を表示するため「%s」という記号を使います。
改行はprintfの文字列の中に書けますので、データから切り離すことが出来ました。
次は変数と同じように、宣言後の代入を試してみます。
int a; a = 12; |
このようなイメージです。
<sample program 081-08>
#include <stdio.h> #define MAX_STRING 10 int main(void) { char str[MAX_STRING]; str = "Hello"; printf("%s\n", str); return 0; } |
コンパイルでエラーが発生してしまい、実行することが出来ません。
エラー内容を見てみましょう。
error C3863: 配列型 'char [10]' を割り当てることはできません。
何のことやら分かりませんが、ダメということは分かります。
「数値」の配列も宣言時に初期値を設定することは出来ますが、処理の中で↓のように代入することは出来ません。
int data[10]; data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; |
「文字列」と同様にコンパイルでエラーが発生します。
次回は、scanfで「文字列」を入力する方法を説明します。