Ubuntu 终端中字符串末尾的奇怪输出
Weird output at the end of string in Ubuntu terminal
我在 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的答案是正确的方法。
相关文章:
- 如何在不丢失输出的情况下杀死/停止终端中正在运行的进程?
- 输出 c++ 窗口 wstring 日志在终端中正确
- 在集成终端上运行vscode lldb调试器时,如何获取程序的输出?
- CUDA内核printf()在终端中不产生输出,在探查器中工作
- 为什么我的代码在终端中没有输出任何内容.开始新行没有错误
- 如何从 bash 脚本捕获终端输出并将其显示在我的 Qt UI 中?
- 如何在不将其连接到终端的情况下运行'screen',以便我可以在C++ (qt) 应用程序中捕获输出?
- 终端命令输出到 CPP 中的数组
- VisualStudio代码C 终端用于输出
- 在C++中使用QProcess重定向gnome终端的输出
- 可以在没有终端的 Unix 进程上写入标准输出
- Linux终端中C++的奇怪输出
- Vim:警告:输出不到终端
- 输出字符串使用 C++ 覆盖 Linux 终端上的最后一个字符串
- 如何将输出从终端保存到变量
- 如何输出到当前可见的终端
- 如何使cplex不输出到终端
- C++函数系统(命令)的输出在Linux终端中不显示颜色
- 如何在不输出新行的情况下更新终端中的输出字段
- 如何查看在终端上编译的c ++程序的输出