字符串到字符数组不起作用

String to Char Array not working

我注意到如果我的字符串为空,char 数组也不会变空。请看下面的代码:

std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);

sRecord.m_strUsername 是一个 char[1064],但如果它已经填充并且我尝试做一个 copy(或 strcpy),其中 strUsername 为空,什么也没有发生,即使我希望 sRecord.m_strUsername 变为空或者只是变成 strUsername 是什么。

您忘记了零终止符:

std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);
sRecord.m_strUsername[strUsername.size()] = '[=10=]';

或者

std::strcpy(sRecord.m_strUsername, strUsername.c_str() );

或者如果您希望数组的所有 "unused" 个字符为 [=13=]:

std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);
std::fill(sRecord.m_strUsername + strUsername.size(), 
          sRecord.m_strUsername + 1064, '[=12=]');

后者通常不是必需的,因为 C 风格的字符串通常被定义为 [sRecord.m_strUsername[0], first '[=14=]' in the array) 这样的范围。第一个 [=13=] 之后的内容通常无关紧要,除非您出于某种原因想要访问它。

范围[str.begin(), str.end())只包含字符串的所有字符。 C 风格的字符串(又名 char 数组)需要一个额外的 '[=18=]' 终止字符。

根据我的第一个和第二个建议的修复,范围 [sRecord.m_strUsername[0], first '[=14=]' in the array) 将等于 strUsername 中的字符,只要后者不包含任何额外的 '[=18=]'s(某物你只是不能轻易地处理 C 风格的字符串。

根据我的第三个建议修复,数组中所有字符之后的每个字符都将是 [=13=]

重要说明:在执行上述任何操作之前,您需要断言您的字符串最多包含 1063 个字符!如果不确定,则在假设不成立或改用 std::strncopy 时引发某种错误。 strncopy 基本上会像我的第三个片段一样,但你必须自己将数组的最后一个元素归零。

您可以使用 strcpy 自动复制终止空字符,以及 std::string::c_str:

std::strcpy(sRecord.m_strUsername, strUsername.c_str());

因此,如果 strUsername 为空 (""),m_strUsername 也将在该调用后等于 ""