为什么它要打印额外的随机字符?[复制]

Why is it printing additional random characters? [duplicate]

提问人:Yogesh Kumar 提问时间:4/20/2023 更新时间:4/20/2023 访问量:82

问:

在此处输入图像描述

该图显示了输入和输出。

我采用字符数组作为输入并打印它,现在当我打印它时,它会打印输入字符以及一些额外的随机字符,为什么会这样??

#include<iostream>
int main()
{
    int n;
    std::cin>>n;

    char array[100]; 
    
    for(int i=0; i<n; i++) 
    {
        std::cin>>array[i];
    }
    
    std::cout<<array;

    return 0;
}

我原以为它会打印我提供的字母作为输入,但它正在打印额外的字符。

C++ 数组 输入 输出

评论

0赞 Quimby 4/20/2023
您是否尝试过使用调试器单步执行代码?你认为有什么作用?std::cout<<array;

答:

4赞 463035818_is_not_an_ai 4/20/2023 #1

数组 的数组被视为字符串,字符串被终止。你的 和 的混合有点奇怪,但假设它是你想要的,你只需要添加终止符:char\0intchar

#include<iostream>
int main()
{
    int n;
    std::cin>>n;

    char array[100]; 
    
    for(int i=0; i<n; i++) 
    {
        std::cin>>array[i];
    }
    array[n] = '\0';
    
    std::cout<<array;

    return 0;
}

虽然你应该用于字符串。上面的代码将在用户输入或更多 for 时调用未定义的行为。std::string100n

3赞 Andreas Wenzel 4/20/2023 #2

线

std::cout<<array;

requires 这是一个有效的 C 样式字符串,该字符串是由 null 字符结尾的字符数组。您违反了此规则,因为您没有确保字符串以 null 结尾。array

您的程序正在打印垃圾字符,因为该代码行将继续打印字符,直到它碰巧找到 null 字符(即具有字符代码的字符)。0

我建议你添加这一行

array[n] = '\0';

在循环后添加终止 null 字符。