输出char *到std :: string C ++

时间:2013-03-04 18:16:30

标签: c++ xml string char

所以给出:

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?

3 个答案:

答案 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);