我正在使用 std::string
与需要 char*
和长度字段的 C 库接口:
std::string buffer(MAX_BUFFER_SIZE, '\0');
TheCLibraryFunction(&buffer[0], buffer.size());
但是,字符串的 size()
是实际大小,而不是包含实际有效非空字符的字符串的大小(即相当于 strlen()
)。告诉 std::string
减小其大小以便只有 1 个结束空终止符没有显式空终止符的最佳方法是什么?我能想到的最佳解决方案是:
buffer.resize(strlen(buffer.c_str()));
甚至:
char buffer[MAX_BUFFER_SIZE]{};
TheCLibraryFunction(buffer, sizeof(buffer));
std::string thevalue = buffer;
希望有一些内置/“现代 C++”的方式来做到这一点。
编辑
我想澄清我之前提到的“结束空终止符”要求。我并不是说我想要在 std::string
的缓冲区中明确地使用 1 个空终止符,我或多或少地想到了来自 basic_string::c_str()
的字符串,它有 1 个空终止符.但是,出于 resize()
的目的,我希望它代表 实际 非空字符的大小。对困惑感到抱歉。
原文由 void.pointer 发布,翻译遵循 CC BY-SA 4.0 许可协议
有很多方法可以做到这一点;但对我来说,似乎最“C++”而不是 C 的可能是:
即擦除从第一个 null 到结尾的所有内容。