簡體   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