我们可以删除 CString 末尾的空字符吗?
Posted
技术标签:
【中文标题】我们可以删除 CString 末尾的空字符吗?【英文标题】:Can we remove the null character at the end of CString? 【发布时间】:2019-06-19 16:34:00 【问题描述】:我们可以从CString
中删除空字符吗?我正在尝试复制unsigned char
并将其转换为CString
。但另外添加了一个空字符。他们的方法是删除它吗???
【问题讨论】:
为什么空字符是个问题?请以代码的形式显示一些上下文。您遇到的真正问题可能在其他地方,在我们看不到的代码中。 这是一个真实的XY Problem 【参考方案1】:终止 NUL 字符在技术上不是 CString
的一部分。它被存储以允许将CString
传递给需要 C 样式字符串的函数。没有办法阻止这种情况。
【讨论】:
【参考方案2】:不,这没有任何意义。 CString
(和 std::string
)作为 C 风格的空终止字符串的实现存在。它们被设计为始终具有终止空值。
如果你想用别的东西,试试:
#include <vector>
std::vector<unsigned char> vectUnsignedChars;
使用这样的结构,您可以附加数据并且它不会附加空值。但是,如果您尝试将其传递给一个需要以空字符结尾的字符串的函数,那将是一场灾难。
【讨论】:
CString
和 std::string
都不是 C 风格字符串的实现。恰恰相反,因为任何一个都可以包含嵌入的 NUL 字符。终止 NUL 字符在技术上不是任一类中受控序列的一部分。它纯粹是为了允许将字符串传递给期望零开销的 C 样式字符串的接口。它绝对不是字符串的一部分。以上是关于我们可以删除 CString 末尾的空字符吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 MappedByteBuffer 在文件末尾写入空字符?