繁体   English   中英

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

[英]output char* to std::string C++

因此给出:

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

char* memory保存一个curl返回XML文档。

我在做:

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* 因此,基本上整个卷发返回。 XML的5行是哪一行?

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

如果您的curl返回值或其他以\\0结尾的\\0 ,则可以直接执行以下操作

std::string s(chunk.memory);

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

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

std :: string构造函数可以接受char *和数据长度( 请参阅docs ); 例:

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

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

MemoryStruct memory是指向第一个返回的字符的指针, size是返回的字符数。 您想要使用此数据初始化字符串,因此您需要执行以下操作:

s.assign(chunk.memory, chunk.size);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM