在 c++ 中对字符串使用复制函数时打印的垃圾值
Garbage value getting printed when using copy function for a string in c++
我只是在 c++ 中使用复制函数将字符串复制到数组中。但以下代码显示的结果包含垃圾值:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
char t[10];
s = "Hello";
s.copy(t, s.length());
cout << t;
return 0;
}
输出:Hellov._Sï
然而,如果我以不同的方式做同样的事情。我得到了正确的输出。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s = "Hello";
char t[10];
s.copy(t, s.length());
cout << t;
return 0;
}
输出:你好
有人可以解释为什么会发生这种情况吗?我对 c++ 比较陌生。
问题是std::string::length()
不包括字符串的 NUL 终止符。所以s.copy(t, s.length());
'H', 'e', 'l', 'l', 'o'
复制到t
,但不是后面的' '
。该数组的以下元素未清零(它们可能偶然包含一些零(。
但是std::cout
,当传递一个char*
时,期望一个以 nul 结尾的字符串。它将继续打印,直到找到 0 字节或发生其他情况(溢出t
是未定义的行为(。
您可以通过终止 nult
来"修复"它:
t[s.length()] = ' ';
相关文章:
- 回溯C++不打印函数,因此文件
- 重写打印函数而不是覆盖基类
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 打印传递给打印函数的矢量
- 如何使用重新定义的打印函数打印Lua表?
- 调用和打印函数,在 C++ 中返回数组
- Lua C API 自定义打印函数,在字符串中传递空格时不调用
- C++二叉树打印函数实现
- 如何从主 C++ 向模板类中的方法发送打印函数
- 如果我不打印函数参数的值,则将其转换为等于零
- 打印函数模板的内容进行类指针
- C++打印函数的结果?
- 打印 C++ 函数
- 编写一个通用打印函数来打印数组
- 用于打印函数进入和退出跟踪的宏
- 每当尝试打印函数变量时,C++ cout 错误
- GDB:当没有可用的名称符号时,如何打印函数参数值
- 在lua中重新定义打印函数时出现问题
- 打印函数会返回一个意外值,原因是什么
- IntStack的C++递归打印函数