对char数组感到困惑

时间:2016-07-28 07:18:59

标签: c++

我试图更多地了解char数组 使用以下代码

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

1 个答案:

答案 0 :(得分:0)

问题是在前两个语句中隐式添加了null-terminator字符('\0'),但在显式设置数组元素的最后两个语句中没有。当您尝试打印出数组时,这会导致未定义的行为(这意味着输出可能会有所不同,或者应用程序可能会崩溃,具体取决于编译器)。 <<运算符需要null终止符,因此它知道何时停止打印。您需要添加null-terminator,如下所示:

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