我在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'。但在这里我不做这样的事情。那为什么我最后会得到这些角色?
答案 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的答案是正确的方法。