4

私は少し混乱しています。これらのコードの論理的な違いは何ですか?

#include <iostream>
using namespace std;
int main(){
    char a[5]="ABCD"; // this
    cout << a;
    return 0;
}

2番目は

char a[5]={"ABCD"}; // this

3つ目は

char a[5]={'A','B','C','D'}; // this
4

2 に答える 2

6
char a[5]={"ABCD"};
char a[5]={'A','B','C','D','\0'};

どちらの場合も、文字の配列aは char 型の 5 つの要素のサイズで宣言されます。単語"ABCD"を構成する 4 文字と、末尾を指定する最後のヌル文字('\0')を加えたものです。 2 番目のケースでは、二重引用符 (") を使用すると、自動的に追加されます。コンマで区切られたヌル文字を追加することに注意してください。二重引用符 ("") で囲まれた一連の文字は、文字列定数と呼ばれます。C コンパイラ'\0'文字列定数の末尾にヌル文字を自動的に追加して、文字列の末尾を示すことができます。

出典:このリンクはあなたをより良くするのに役立ちます

于 2015-06-04T17:40:02.927 に答える
0

最初の 2 つは、構文のみが異なる配列char[5]へのソースの割り当てです。char[5](5 は 4 文字とヌル ターミネータ)

最後のものも同じことを行いますが、null ターミネータを明示的に指定していません。に割り当てているためchar[5]、最後のものは残りのスペースをゼロで埋め、null ターミネータを効果的に追加して同じように動作しますが、最後のものはchar[4];に割り当ててもコンパイラエラーをスローしません。終了していない文字の配列が残るだけです。

于 2015-06-04T17:44:17.227 に答える