gpt4 book ai didi

c++ - 如何调整 std::string 的大小以删除所有空终止符?

转载 作者:可可西里 更新时间:2023-11-01 17:36:33 26 4
gpt4 key购买 nike

我正在使用 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() 的目的,我希望它代表实际 非空字符的大小。抱歉造成混淆。

最佳答案

有很多方法可以做到这一点;但对我来说似乎最“C++”而不是 C 的可能是:

str.erase(std::find(str.begin(), str.end(), '\0'), str.end());

即删除从第一个 null 到最后的所有内容。

关于c++ - 如何调整 std::string 的大小以删除所有空终止符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com