0

与えられた:

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

char* memorycurl リターン、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*。したがって、基本的にカール全体が戻ります。5行のXMLはどれ?

4

3 に答える 3

4

sizeof(chunk.memory)ポインタのサイズは常に4になります。そのため、std::stringには4文字しか表示されません。

カールリターンまたはその他がで終了する\0場合は、次のことを直接行うことができます

std::string s(chunk.memory);

char *がで終了していない場合\0は、文字列の長さを知る必要があります。これには使用できませんsizeof(chunk.memory)。チャンクサイズに正しいサイズが含まれている場合は、次を使用できます

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 に答える