Ubuntu 终端中字符串末尾的奇怪输出

Weird output at the end of string in Ubuntu terminal

本文关键字:输出 终端 字符串 Ubuntu      更新时间:2023-10-16

我在 Ubuntu 终端中尝试C++。我在字符串末尾收到奇怪的符号。(这在过去也发生在 Ubuntu 的代码块中,但在 Codeblocks Windows 中一切正常)。

这是代码:

#include <iostream>
using namespace std;
int main()
{
    char name[20];
    cout << "nEnter name: ";
    cin.getline(name, 20);
    cout << "nHello ";
    cout.write(name, 20);
    return 0;
}

输出:

Enter name: Yash
Hello Yash�@��Fy

我已经检查了具有相同问题的其他线程。他们都有分配问题,用户没有在末尾添加"\0"。但在这里我没有做这样的事情。那为什么我最后会得到这些字符呢?

cout.write(name, 20);

将(尝试)准确地写 20 个字符,它不会检查''.您可以在自己喜欢的参考资料中查看这些内容。

如果你真的想为此使用char[],你应该写

cout << name;

这将检查终止字符。

但是,最好放弃 C 风格的字符串并改为std::string

int main () {
    std::string name;
    std::cout << "nEnter name: ";
    std::getline(std::cin, name);
    std::cout << "nHello ";
    std::cout << name;
}

为了更好地理解这一点,您永远不会将char name初始化为 0,并且cout.write()不会检查null。一种选择是从一开始就将char name初始化为 0 s:

#include <iostream>
using namespace std;
int main()
{
    char name[20] = {0};
    cout << "nEnter name: ";
    cin.getline(name, 20);
    cout << "nHello ";
    cout.write(name, 20);
    return 0;
}

不过,@BaummitAugen的答案是正确的方法。