c++文字配列

2085 ワード

簡単な定義:
char a1[3] = {'c', '+', '+'};    //      3        
char a2[4] = {'c', '+', '+', '\0'};  //      4        

2番目の文は、次の配列と等しいです.
char a3[4] = "c++";
 
char a3[] = "c++";

文字列の文字面値を使用して文字配列に値を割り当てるため、システムは末尾に空の文字を補うことができます——'0';文字を使って値を割り当てるのは妥当ではないので、a 1文字配列を初期化した後に中に'0'はありません.
1文字配列を取得する大きな時間には,(1)sizeof(array)/sizeof(array[0])を用いて配列長を計算する2つの方法があるといえる.(2)C標準ライブラリ関数strlen()、c++を用いてcstringに定義.hヘッダファイルにあります.1つ目は、任意の配列の上で、a 1,a 2,a 3の長さを出力しようとする最も信頼できる方法です.
cout << sizeof(a2)/sizeof(a1[0]) << endl;
cout << sizeof(a2)/sizeof(a2[0]) << endl;
cout << sizeof(a3)/sizeof(a3[0]) << endl;

出力:
3
4
4

第2の方法の使用状況は比較的限られており、a 2が空の文字'0'で終わるように、配列の間に空の文字要素がない.a 3のような文字列の文字面値で初期化された配列が役立ちます.
cout << strlen(a3) << endl;

出力:
3

どうして上と一致しないのですか.strlenメソッドでは、末尾の空の文字'0'は計算されません.逆に、'0'に遭遇すると計算が停止します.信じないで、a 1、a 2を呼び出して、以下のstrlenを呼び出して、どんな結果があるか見てみましょう.
cout << strlen(a1) <

出力:
9
3

a 1配列には'0'要素がないため、strlenメソッドは'0'文字に遭遇するまで配列の範囲を読み出す.そこで返ってきたのは予知できない数字で、筆者のマシンでは運転時9で、他のマシンではそうではない可能性が高い.a 2には4つの要素があり、最後の要素は'0'であるため、計算に含まれていない.a 2をこのように変更してもstrlen(a 2)の出力結果は3になる.
char a2[7] = {'c', '+', '+', '\0', 'p', 'r', 'i'};

したがって、a 3という文字配列の長さを取得するには、strlen()メソッドを呼び出した後に1を追加して、正しい配列の長さを返す必要があります.
char a3[] = "c++";
cout << strlen(a3)  + 1 << endl;

出力:
4

本当にそうですか.もし私がa 3の文字列の文字列の額面に0を入れたら?
char a3[] = "c++\0";
cout << strlen(a3) + 1 << endl;

出力:
6

0を二重引用符に入れると、単一の文字ではなく文字列として扱われることを意味します.