gpt4 book ai didi

c++ - 如何最有效地从具有大小的 char * 构造 std::string

转载 作者:太空狗 更新时间:2023-10-29 23:45:56 25 4
gpt4 key购买 nike

我正在寻找一种使用 std::string 实现 sprintf() 功能的方法,我从 std::string formatting like sprintf 找到了一个很好的答案.这有点 hacky,因为它直接写入从 string.c_str() 返回的指针。所以我使用 char *malloc()realloc() 重新实现了它。

std::string string_format(const char * format, ...) {
size_t size;
size_t n;
va_list args;
char * buffer;
std::string str;

size = 100;
buffer = malloc(size);
for (;;) {
va_start(args, format);
n = vsnprintf(buffer, size, format, args);
va_end(args);
if (n > -1) {
if (n < size) {
size = n;
break;
}
size = n + 1;
} else {
size *= 2;
}
buffer = realloc(buffer, size);
}

str = std::string(buffer, size);

free(buffer);
return str;
}

我知道我可以这样做:

str = std::string(buffer);

但随后它必须执行 strlen(buffer)。我可以通过以下方式让它变得更好:

str = std::string(buffer, size);

但是通过交换内部缓冲区而不是复制它,使用 string.swap() 会更有效吗?

str.swap(std::string(buffer, size));

有更好的方法吗?

最佳答案

只需使用str.assign(buffer, size);

关于c++ - 如何最有效地从具有大小的 char * 构造 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765528/

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