c++ - 字符串到字符数组不起作用

标签 c++ arrays string char std

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

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

sRecord.m_strUsername 是一个 char[1064],但如果它已经被填充并且我尝试做一个复制(或 strcpy) 与 strUsername 为空,没有任何反应,即使我希望 sRecord.m_strUsername 变为空或只是成为任何 strUsername 是。

最佳答案

你忘记了零终止符:

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

或者替代地

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

或者如果您希望数组中所有“未使用”的字符都是 \0 :

std::copy(strUsername.begin(), strUsername.end(), sRecord.m_strUsername);
std::fill(sRecord.m_strUsername + strUsername.size(), 
          sRecord.m_strUsername + 1064, '\0');

后者通常不是必需的,因为 C 风格的字符串通常被定义为类似 [sRecord.m_strUsername[0], first '\0' in the array) 的范围。 .第一个 \0 之后是什么通常无关紧要,除非您出于任何原因想要访问它。

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

根据我的第一个和第二个建议的修复,范围 [sRecord.m_strUsername[0], first '\0' in the array)将等于 strUsername 中的字符只要后者不包含任何额外的 '\0' s(用 C 风格的字符串无法轻易处理的东西)。

在我的第三个建议固定后,数组中所有字符之后的每个字符都将是 \0 .

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

关于c++ - 字符串到字符数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903564/

相关文章:

sql - PostgreSQL:根据数组(外键)列连接 2 个表

python - 在python 3中删除字节中的一些特定内容

c++ - Stroustrup书与C++ Standard之间的明显矛盾

c++ - 在 C99 中需要 _Bool 吗?

javascript - ngResource + 401错误处理: Expected response either an array or an object

Java:可以优化多大的字符串以在序列化对象中占用更少的内存?

Java、字符串差分算法

c++ - 为什么编译器会在这里提示函数歧义?

c++ - 为什么没有发生隐式转换

javascript - 在 JavaScript 中使用单个数组更新数组对象