C++ C++;库特新鲜数组乱七八糟

C++ C++;库特新鲜数组乱七八糟,c++,C++,当我“cout”一个空数组时,我会胡言乱语。为什么? int main() { char test[10]; cout << test; return 0; } int main(){char test[10];cout,因为您的数组未初始化。它的内容可以是任何内容,您可以使用它们获得未定义的行为 您可以将它们全部初始化为零: char test[10] = {}; 打印时,将不打印任何内容。您的数组未初始化为任何内容,您正在输出未初始化数组的第一个元素 如果希望获得可预测的行为

当我“cout”一个空数组时,我会胡言乱语。为什么?

int main() { char test[10]; cout << test; return 0; }

int main(){char test[10];cout,因为您的数组未初始化。它的内容可以是任何内容,您可以使用它们获得未定义的行为

您可以将它们全部初始化为零:

char test[10] = {};

打印时,将不打印任何内容。

您的数组未初始化为任何内容,您正在输出未初始化数组的第一个元素

如果希望获得可预测的行为,则需要首先初始化数组(以下初始化为空数组):


int main()

初始化它:

int main() { 
    char test[10] = {};
    cout << test;
    return 0;
}
int main(){
字符测试[10]={};

cout没有“空数组”这样的东西在C++中,你定义了一个10代码的数组:char < /c> > s,你得到了一个10代码> char < /c> >的数组。因为它是一个本地数组,默认情况下它是未初始化的,这意味着10个代码> char < /Case> s包含垃圾。在此之前,这是您在输出中设置的内容。可能还值得注意的是,您可能会看到调试和发行版编译之间的差异。许多编译器会在调试模式下自动初始化变量,通常这是一个编译器设置。不过,您不应该依赖于此。有几种方法可以初始化字符a雷

简单地

chartest[10]={};

有一些文字

chartest[]=“一些文本”

作为个体角色

chartest[]={'s','o','m','e};

第一个值集(对于字符串,这是一个空字符串,如“\0”)被视为终止符

chartest[]={0};

或者像这样

char测试[];
测试[0]='\0';


还要记住数组和指针的等价性

在哪里

char*test=“一些文本”

char test[] = "some text";

char test[]=“some text”

char*test
char test[]
根本不等价。数组类型在表达式中使用时会转换为指向char类型的指针,除非它是
&
sizeof
的操作数。还请记住数组和指针的等价性没有等价性,它们是不同的类型。好的点和我不清楚-我是指等价描述某些属性,而不是谈论类型等价。在世界各地的许多C和C++类中教过的。例如,Ekimo.com/~SCS/Cys/Notes/SX10E.HTML。可能不恰当地命名,但却被广泛理解。
char test[10] = {};
char test[] = "some text";
char test[] = { 's', 'o', 'm', 'e' };
char test[] = { 0 };
char test[];
test[0] = '\0';
char* test = "some text";
char test[] = "some text";