我有以下代码来填充std::stringcurl get响应.
struct curl_string {
std::string tmpStr;
size_t len;
};
void init_string(struct curl_string *s) {
s->len = 0;
}
size_t writefunc(void *ptr, size_t size, size_t nmemb, struct curl_string *s)
{
size_t new_len = s->len + size*nmemb;
s->tmpStr.reserve(new_len + 1);
memcpy(&s->tmpStr[0] + s->len, ptr, size*nmemb);
s->tmpStr[new_len] = '\0';
s->len = new_len;
return size*nmemb;
}
Run Code Online (Sandbox Code Playgroud)
问题是,即使我保留了正确的长度,当我尝试读回字符串时,大小仍为0.
我想避免使用for循环一次添加1个字符.有没有办法做到这一点,但仍然有正确的字符串长度std::string?
你的问题是std::string::reserve只保留额外字符的内存,但实际上并没有改变字符串的长度.修改底层缓冲区时不会重新计算大小,因为在所有情况下都几乎不可能检测到.
解决方案是使用resize而不是reserve:
s->tmpStr.resize(new_len + 1);
Run Code Online (Sandbox Code Playgroud)
是否有理由手动跟踪长度?你可以打电话s->tmpStr.size().
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |