【发布时间】:2020-05-17 05:27:28
【问题描述】:
我只是在 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++ 比较陌生。
【问题讨论】:
-
这能回答你的问题吗? What is a null-terminated string?
-
我只是在 c++ 中使用 copy 函数将字符串复制到数组中 -- 你知道这不是必需的,你可以使用
std::string原样,不复制任何内容? -
@Yksisarvinen 我不太明白它与我的问题有什么关系。我的代码中字符串对象的初始化有问题吗?
-
@PaulMcKenzie 我知道这一点,但我只是想知道 str.copy() 是如何工作的。
-
@ChinmayVemuri
copy做了它应该做的事。s.length()复制到t的字符数。它不会做更多或更少。复制完成后,copy不知道如何处理t。简而言之,您的数组具有未初始化的值,因为它是一个局部变量,与本地声明的任何其他未初始化的变量类型没有什么不同。