所以给出:
struct MemoryStruct {
char *memory;
size_t size;
};
char* memory
持有卷曲返回,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 *
如何获得char*
的实际值。所以基本上整个卷曲回归。哪5行XML?
答案 0 :(得分:4)
sizeof(chunk.memory)
将始终给出一个指针大小,在你的情况下似乎是4.这就是你在std :: string中只看到4个字符的原因。
如果您的卷曲返回或其他任何内容被\0
终止,那么您可以直接执行以下操作
std::string s(chunk.memory);
如果你的char *没有被\0
终止,那么你需要知道字符串的长度 - 你不能使用sizeof(chunk.memory)
。如果你的chunk.size包含正确的大小,那么你可以使用
std::string s(chunk.memory, chunk.size);
答案 1 :(得分:2)
std :: string 构造函数可以接受 char * 和数据长度(see the docs);例如:
std::string s(chunk.memory, chunk.size);
所以容器会为你的字符串预先分配需要空间并用它进行初始化。
答案 2 :(得分:2)
在MemoryStruct
memory
中是指向第一个返回字符的指针,size
是返回的字符数。您想要使用此数据初始化字符串,因此您需要执行以下操作:
s.assign(chunk.memory, chunk.size);