C言語文字配列の初期化
1、文字配列の定義と文字配列の初期化、最も理解しやすい方法は文字ごとに配列中の各要素に与えることである.
すなわち、str[0]からstr[9]10要素に10文字をそれぞれ付与する.カッコで指定された文字数が配列長より大きい場合は、構文エラーで処理する.配列の長さより小さい場合は、これらの文字配列の前の要素のみを、残りの要素は自動的に空の文字('0')にします.2、文字配列と文字列c言語では、文字列を文字配列として処理する.(c++ではない)実際の応用において注目されているのは、文字配列の長さではなく有効文字列の長さである.例えば、1つの文字配列の長さを100と定義し、実際の有効文字は40個しかない.文字列の実際の長さを測定するために、C言語は「文字列終了フラグ」を規定している.は、文字'0'で表されます.10文字目が'0'の文字列がある場合、この文字列の有効文字は9文字です.すなわち、最初の文字'0'に遭遇した場合、文字列が終了し、その前の文字から文字列が構成されることを示す.
システムは文字列定数にも自動的に終了文字として'0'を追加します.たとえば「Cプログラム」は9文字ですが、メモリに10バイト、最後のバイト'0'はシステムによって自動的に加算されます.(sizeof()関数検証可能)終了フラグ'0'があると、文字配列の長さはそれほど重要ではなく、プログラムでは配列の長さに基づいて文字列の長さを決定するのではなく、'0'の位置を検出することによって文字列が終了するかどうかを判定することが多い.もちろん、文字配列を定義するときは、実際の文字列の長さを推定し、配列の長さが常に文字列の実際の長さより大きいことを保証します.(実際の文字列定義では、char str[])のように配列長を指定しないことが多い.説明:'0はASCIIコードが0の文字を表し、ASCIIコードテーブルからASCIIコードが0の文字は表示可能な文字ではなく、「空のオペレータ」であることがわかるああ、何もしない.これを文字列終了フラグとして使用すると、追加の操作や有効文字が追加されず、識別用のフラグが1つだけ生成されます.C言語で文字列を処理する方法について以上のことを理解してから、文字配列を初期化する方法を補足します.つまり、文字列定数で文字配列を初期化することができます.
かっこは省略できますが、以下のようになります
注意:上記のような文字配列の全体的な付与は、文字配列の初期化時にのみ使用でき、文字配列の付与には使用できません.文字配列の付与は、その要素に対して1つ1つのみ付与できます.次の付与方法は間違っています.
単一の文字を初期値として使用するのではなく、初期値として文字列(注意:文字列の両端は二重引用符""で囲まれていません)を使用します.明らかに、この方法はより直感的で便利です.(注意:配列strの長さは10ではなく11です.この点は、文字列定数「I am happy」のため、覚えておいてください.の最後にシステムによって自動的に'0')が追加されるので、上の初期化は下の初期化と等価である.
次の等価ではない
前者の長さは11、後者の長さは10である.説明:文字配列は、最後の文字が'0'であることを要求するものではなく、'0'を含まなくてもよいので、以下に書くのは完全に合法です.
文字配列を2つの異なる方法で初期化した後に得られる配列長は異なることがわかる.
結果:10 11 3、文字列の表現形式C言語では、文字列を2つの方法で表すことができ、格納することができる:(1)文字配列で1つの文字列を格納する
(2)文字ポインタで文字列を指す
第2の表現方法についてはstrは文字列変数であり,定義時に文字列定数「I love China」をその文字列変数に直接付与すると考えられるが,これは正しくない.C言語は文字列定数に対して文字配列によって処理され、メモリに文字配列を開いて文字列定数を格納し、プログラムは文字列ポインタ変数strを定義する際に文字列ヘッダアドレス(すなわち文字列を格納する文字配列のヘッダアドレス)をstrに割り当てるだけである.
%sは文字列を出力します.文字ポインタ変数名str(第1の表現方法では、文字配列名が文字配列の先頭アドレスであり、第2のポインタの意味と一致する)が与えられると、システムは、文字列の終了識別子「0」に遭遇するまで、その指向する文字データを出力し、strを自動的に1つ追加し、次の文字を指すようにします.. 4、文字ポインタ変数と文字配列の2つの方法で文字列を表す議論は、文字配列と文字ポインタ変数で文字列の記憶と演算を実現することができるが、両者の間には違いがあり、混同してはならない.
4.1、文字配列はいくつかの要素からなり、各要素に1文字を置く.一方、文字ポインタ変数にはアドレス(文字列/文字配列の先頭アドレス)が格納されており、文字ポインタ変数(文字列の先頭アドレス)に文字列を配置するわけではありません.
4.2、代入方式:文字配列に対して各要素に対してのみ代入でき、以下の方法で文字配列に対して代入できない
(ただし、文字配列の初期化時には、char str[14]=「I love China」;)であり、文字ポインタ変数には、次の方法で値を割り当てることができます.
あるいはchar*a="I love China";どちらでもいい
4.3、文字ポインタ変数に初期値(初期化):char*a="I love China";等価:char*a;a="I love China";文字配列の初期化char str[14]="I love China";char str[14];str="I love China";4.4、文字配列が定義されている場合、決定されたメモリアドレスがあり、複数回の付与はできません.文字ポインタ変数を定義する場合、決定された文字データを指さず、複数回の付与が可能です.5、文字列処理関数
5.1文字列接続
機能:関数は文字列str 2をstr 1の末端に接続し、ポインタstr 1注意を返します.接続前の2つの文字列の後ろには「0」があり、接続時に文字列1の後ろの「0」を削除し、新しい列の最後に1つの「0」だけを残します.
5.2文字列コピー
機能:文字列strSourceの文字を文字列strDestinationにコピーします.空の値の終端子が含まれます.戻り値はポインタstrDestinationです.
注意:
1、「文字配列1」は配列名で書く必要があり、「文字列2」は、文字配列名であってもよいし、文字列定数2であってもよいし、コピー時に文字列の後ろの'0'とともに配列1にコピーする3、付与文で文字列定数または文字配列を直接文字配列に割り当てることはできない(通常の変数配列と同じ)はstrcpy関数でしか処理できません.4、strcpy関数で文字列2の最初の文字を文字配列1にコピーできます.
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
すなわち、str[0]からstr[9]10要素に10文字をそれぞれ付与する.カッコで指定された文字数が配列長より大きい場合は、構文エラーで処理する.配列の長さより小さい場合は、これらの文字配列の前の要素のみを、残りの要素は自動的に空の文字('0')にします.2、文字配列と文字列c言語では、文字列を文字配列として処理する.(c++ではない)実際の応用において注目されているのは、文字配列の長さではなく有効文字列の長さである.例えば、1つの文字配列の長さを100と定義し、実際の有効文字は40個しかない.文字列の実際の長さを測定するために、C言語は「文字列終了フラグ」を規定している.は、文字'0'で表されます.10文字目が'0'の文字列がある場合、この文字列の有効文字は9文字です.すなわち、最初の文字'0'に遭遇した場合、文字列が終了し、その前の文字から文字列が構成されることを示す.
システムは文字列定数にも自動的に終了文字として'0'を追加します.たとえば「Cプログラム」は9文字ですが、メモリに10バイト、最後のバイト'0'はシステムによって自動的に加算されます.(sizeof()関数検証可能)終了フラグ'0'があると、文字配列の長さはそれほど重要ではなく、プログラムでは配列の長さに基づいて文字列の長さを決定するのではなく、'0'の位置を検出することによって文字列が終了するかどうかを判定することが多い.もちろん、文字配列を定義するときは、実際の文字列の長さを推定し、配列の長さが常に文字列の実際の長さより大きいことを保証します.(実際の文字列定義では、char str[])のように配列長を指定しないことが多い.説明:'0はASCIIコードが0の文字を表し、ASCIIコードテーブルからASCIIコードが0の文字は表示可能な文字ではなく、「空のオペレータ」であることがわかるああ、何もしない.これを文字列終了フラグとして使用すると、追加の操作や有効文字が追加されず、識別用のフラグが1つだけ生成されます.C言語で文字列を処理する方法について以上のことを理解してから、文字配列を初期化する方法を補足します.つまり、文字列定数で文字配列を初期化することができます.
char str[ ]={"I am happy"};
かっこは省略できますが、以下のようになります
char str[ ]="I am happy";
注意:上記のような文字配列の全体的な付与は、文字配列の初期化時にのみ使用でき、文字配列の付与には使用できません.文字配列の付与は、その要素に対して1つ1つのみ付与できます.次の付与方法は間違っています.
char str[ ];
str="I am happy";// ,
単一の文字を初期値として使用するのではなく、初期値として文字列(注意:文字列の両端は二重引用符""で囲まれていません)を使用します.明らかに、この方法はより直感的で便利です.(注意:配列strの長さは10ではなく11です.この点は、文字列定数「I am happy」のため、覚えておいてください.の最後にシステムによって自動的に'0')が追加されるので、上の初期化は下の初期化と等価である.
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
次の等価ではない
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
前者の長さは11、後者の長さは10である.説明:文字配列は、最後の文字が'0'であることを要求するものではなく、'0'を含まなくてもよいので、以下に書くのは完全に合法です.
char str[5]={'C','h','i','n','a'};
文字配列を2つの異なる方法で初期化した後に得られる配列長は異なることがわかる.
#include <stdio.h>
void main(void)
{
char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};
char c2[]="I am happy";
int i1=sizeof(c1);
int i2=sizeof(c2);
printf("%d
",i1);
printf("%d
",i2);
}
結果:10 11 3、文字列の表現形式C言語では、文字列を2つの方法で表すことができ、格納することができる:(1)文字配列で1つの文字列を格納する
char str[ ]="I love China";
(2)文字ポインタで文字列を指す
char* str="I love China";
第2の表現方法についてはstrは文字列変数であり,定義時に文字列定数「I love China」をその文字列変数に直接付与すると考えられるが,これは正しくない.C言語は文字列定数に対して文字配列によって処理され、メモリに文字配列を開いて文字列定数を格納し、プログラムは文字列ポインタ変数strを定義する際に文字列ヘッダアドレス(すなわち文字列を格納する文字配列のヘッダアドレス)をstrに割り当てるだけである.
printf("%s
",str);
%sは文字列を出力します.文字ポインタ変数名str(第1の表現方法では、文字配列名が文字配列の先頭アドレスであり、第2のポインタの意味と一致する)が与えられると、システムは、文字列の終了識別子「0」に遭遇するまで、その指向する文字データを出力し、strを自動的に1つ追加し、次の文字を指すようにします.. 4、文字ポインタ変数と文字配列の2つの方法で文字列を表す議論は、文字配列と文字ポインタ変数で文字列の記憶と演算を実現することができるが、両者の間には違いがあり、混同してはならない.
4.1、文字配列はいくつかの要素からなり、各要素に1文字を置く.一方、文字ポインタ変数にはアドレス(文字列/文字配列の先頭アドレス)が格納されており、文字ポインタ変数(文字列の先頭アドレス)に文字列を配置するわけではありません.
4.2、代入方式:文字配列に対して各要素に対してのみ代入でき、以下の方法で文字配列に対して代入できない
char str[14];
str="I love China"; // , , , 。
(ただし、文字配列の初期化時には、char str[14]=「I love China」;)であり、文字ポインタ変数には、次の方法で値を割り当てることができます.
char* a;
a="I love China";// ,
あるいはchar*a="I love China";どちらでもいい
4.3、文字ポインタ変数に初期値(初期化):char*a="I love China";等価:char*a;a="I love China";文字配列の初期化char str[14]="I love China";char str[14];str="I love China";4.4、文字配列が定義されている場合、決定されたメモリアドレスがあり、複数回の付与はできません.文字ポインタ変数を定義する場合、決定された文字データを指さず、複数回の付与が可能です.5、文字列処理関数
5.1文字列接続
char *strcat(char *str1,const char *2 );
char *strcat(char *strDestination,const char *strSource );
機能:関数は文字列str 2をstr 1の末端に接続し、ポインタstr 1注意を返します.接続前の2つの文字列の後ろには「0」があり、接続時に文字列1の後ろの「0」を削除し、新しい列の最後に1つの「0」だけを残します.
5.2文字列コピー
char *strcpy(char *str1,const char *2 );
char *strcpy(char *strDestination,const char *strSource );
機能:文字列strSourceの文字を文字列strDestinationにコピーします.空の値の終端子が含まれます.戻り値はポインタstrDestinationです.
注意:
1、「文字配列1」は配列名で書く必要があり、「文字列2」は、文字配列名であってもよいし、文字列定数2であってもよいし、コピー時に文字列の後ろの'0'とともに配列1にコピーする3、付与文で文字列定数または文字配列を直接文字配列に割り当てることはできない(通常の変数配列と同じ)はstrcpy関数でしか処理できません.4、strcpy関数で文字列2の最初の文字を文字配列1にコピーできます.