2016-07-28 64 views
1

我试图理解字符数组与下面的代码更 困惑字符数组

int main() { 
    char test[] = "hello"; 
    char here[4] = "ola"; 
    char bon[] = { 'w','o','r','d' }; 
    char word[4] = { 'z','f','f','z' }; 

    std::cout << test << std::endl; 
    std::cout << here << std::endl; 
    std::cout << bon << std::endl; 
    std::cout << word << std::endl; 
    return 0; 
} 

输出

hello 
ola 
wordhello 
zffzwordhello 

为什么它给了我这个输出不

hello 
ola 
word 
zffz 
+0

您在这里末尾缺少一个''\ 0''字符:'char bon [] = {'w','o',' r','d'} ;.' –

+0

和“word”一样。 –

+0

如果将字符串传递给输出例程,则该例程不知道该字符串有多长。粗略地说:它继续打印,直到达到第一个''\ 0''字符。 –

回答

0

问题是null结束符('\0')被隐式添加到fir st两个语句,但不是在显式设置数组元素的最后两个语句中。当您尝试打印数组时,这会导致未定义的行为(这意味着输出可能会有所不同,或者应用程序可能会崩溃,具体取决于编译器)。 <<操作员需要空终止符,以便知道何时停止打印。您需要添加空终止符,如下所示:

char bon[] = { 'w','o','r','d','\0' }; 
char word[5] = { 'z','f','f','z','\0' }; 
+0

@RudyVelthuis是的,我知道,正如你所看到的,我已经在我的答案的第一句话中说过了。 –

+0

我不是故意要告诉你的。我只是忘记了适当的地理位置。我的意思是这个OP。抱歉。 –