文字配列の入出力には次の 2 つの方法があります。
(1) 文字ごとに入力および出力します。文字の入力または出力には、フォーマット文字「%c」を使用します。例えば
int main()
{
char c[6]; //定义一个字符串
for (int i = 0; i < 5; i++)
{
scanf("%c", &c[i]); //输入字符串
}
for (int i = 0; i < 5; i++)
{
printf("%c", c[i]); //输出字符串
}
return 0;
}
(2) 文字列全体を一度に入力または出力します。書式文字「%s」を使用することは、文字列の入出力を意味します。例えば
int main()
{
//char str[]={"China"};
char str[6];
scanf("%s", str);
printf("%s", str);
return 0;
}
メモリ内の配列の格納条件は次のとおりです。
出力が '\0' に遭遇すると、出力は停止します。
説明:
(1) 出力文字にターミネータ「\0」が含まれていません。
(2) 書式文字「%s」を使用して文字列を出力する場合、printf関数の出力項目は配列要素名ではなく文字配列名となります。
(3) 配列の長さが文字列の実際の長さより長い場合、配列は '\0' に遭遇するまでのみ出力されます。例えば
char c[10]={
"China"}; //字符串长度为5,连'\0'一共占6个字节
printf("%s",c);
10 文字を出力するのではなく、文字列の有効な文字「中国」のみを出力します。これが、フラグを文字列で終了することの利点です。
(4) 文字配列に複数の '\0' が含まれる場合、最初の '\0' が見つかったときに終了します。例えば
int main()
{
char str[10] = {
"China\0boy"};
printf("%s", str);
return 0;
}
(5) scanf関数を使用して文字列を入力することができます。scanf("%s",c);
scanf 関数の入力項目 c は、定義された文字配列の名前であり、入力文字列は定義された文字配列の長さよりも短くなければなりません。たとえば、キーボードから「中国」と入力すると、
システムは中国の後に「\0」の末尾文字を自動的に追加します。scanf 関数を使用して複数の文字列を入力する場合は、文字列をスペースで区切る必要があります。例えばchar c[6];
char str1[5],str2[5],str3[5];
scanf("%s%s%s",str1,str2,str3);
入力データ:How are you?
スペース文字で区切られるため、3つの文字列として入力します。入力後の str1、str2、str3 配列の状態は次のようになります。
配列内の未割り当ての要素の値は自動的に '\0' に設定されます。に変更した場合
char str[13];
scanf("%s",str);
「How are you?」と入力すると、
システムは入力文字列間の区切り文字としてスペース文字を使用するため、スペースの前の文字「How」のみが str に送信されます。「How」は文字列として扱うため、その後に「\0」を追加します。str の配列状態は次のとおりです。
注: scanf 関数の入力項目が文字配列名の場合は、アドレス記号 & を追加しないでください。C言語では、配列名は配列の最初の要素 (または配列の開始点) 原点アドレス)。
次の図は例です。配列が 6 バイトを占める場合、この図が表すのは文字配列です。配列名 c はアドレス 2000 を表します。
このprintf("%o",c); //八进制形式输出
出力ステートメントを使用して、配列の最初の要素のアドレス、つまり配列の開始アドレスを取得できます。
(6) 上記の文字列の出力方法。printf("%s",c);
実際は次のように実行されます。文字配列名 c から配列の先頭要素のアドレスを求め、'\0' まで文字を 1 文字ずつ出力します。に遭遇しました。