0

所以给出:

struct MemoryStruct {
    char *memory;
    size_t size;
};

char* memory持有 curl 返回,XML doc。

我在做:

if(chunk.memory) {
    std::cout << "char size is " << sizeof(chunk.memory) << std::endl;
    std::string s = "";
    for (int c = 0; c<sizeof(chunk.memory); c++) {
        s.push_back(chunk.memory[c]);
    }
    std::cout << "s: " << s.c_str() << std::endl;
}

我只是回来<?xm

所以sizeof()我认为是返回 char* 中的总字节数

我如何获得实际值是 a char*。所以基本上整个卷曲都回来了。哪一行是 5 行 XML?

4

3 回答 3

4

sizeof(chunk.memory)将始终为您提供指针的大小,在您的情况下似乎为 4。这就是为什么您在 std::string 中只看到 4 个字符的原因。

如果您的 curl 返回或其他任何内容由 终止\0,那么您可以直接执行以下操作

std::string s(chunk.memory);

如果您的 char * 不是由 终止\0,那么您需要知道字符串的长度 - 您不能sizeof(chunk.memory)用于此。如果您的 chunk.size 包含正确的大小,那么您可以使用

std::string s(chunk.memory, chunk.size);
于 2013-03-04T18:18:10.607 回答
2

std::string构造函数可以接受char*和数据长度(参见文档);例子:

  std::string s(chunk.memory, chunk.size);

因此容器将为您的字符串预先分配需要的空间并使用它进行初始化。

于 2013-03-04T18:22:21.900 回答
2

InMemoryStruct memory是指向第一个返回字符的指针,是返回size的字符数。你想用这个数据初始化一个字符串,所以你需要这样做:

s.assign(chunk.memory, chunk.size);
于 2013-03-04T18:22:39.983 回答