我们可以删除 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;

使用这样的结构,您可以附加数据并且它不会附加空值。但是,如果您尝试将其传递给一个需要以空字符结尾的字符串的函数,那将是一场灾难。

【讨论】:

CStringstd::string 都不是 C 风格字符串的实现。恰恰相反,因为任何一个都可以包含嵌入的 NUL 字符。终止 NUL 字符在技术上不是任一类中受控序列的一部分。它纯粹是为了允许将字符串传递给期望零开销的 C 样式字符串的接口。它绝对不是字符串的一部分。

以上是关于我们可以删除 CString 末尾的空字符吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 MappedByteBuffer 在文件末尾写入空字符?

从末尾删除向量中的所有空元素

解决CsvWriter:中文乱码末尾行多一行空格(/r)非第一列空字符串""显示null问题

MySQL可以自动将空字符串转换为NULL吗?

从找到空格和标点符号的数组中删除字符[重复]

word怎么自动删除空字符行?