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

时间:2016-02-06 16:49:17

标签: c++ string ubuntu terminal char

我在Ubuntu终端尝试C ++。我在字符串的末尾得到了奇怪的符号。(这也发生在Ubuntu的Codeblocks中,但在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'。但在这里我不做这样的事情。那为什么我最后会得到这些角色?

2 个答案:

答案 0 :(得分:3)

cout.write(name, 20);

将(尝试)正好写出20个字符,它不会检查'\0'。您可以在favorite reference

中查看此类内容

如果你真的想使用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;
}

答案 1 :(得分:0)

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

#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的答案是正确的方法。