Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的简单序列化示例+;_C++_Serialization - Fatal编程技术网

C++ c+中的简单序列化示例+;

C++ c+中的简单序列化示例+;,c++,serialization,C++,Serialization,我有以下结构: typedef struct{ int test; std::string name; } test_struct; 然后,我在主函数中有以下代码: int main(int argc, char *argv[]){ test_struct tstruct; tstruct.test = 1; tstruct.name = "asdfasdf"; char *testout; int len; testout

我有以下结构:

typedef struct{
    int test;
    std::string name;
} test_struct;
然后,我在主函数中有以下代码:

int main(int argc, char *argv[]){
    test_struct tstruct;
    tstruct.test = 1;
    tstruct.name = "asdfasdf";

    char *testout;
    int len;

    testout = new char[sizeof(test_struct)];

    memcpy(testout, &tstruct, sizeof(test_struct) );
    std::cout<< testout;
}
intmain(intargc,char*argv[]){
测试结构;
t结构试验=1;
tstruct.name=“asdfasdf”;
字符*测试输出;
内伦;
testout=新字符[sizeof(test_struct)];
memcpy(testout和tstruct,sizeof(test_struct));
std::coutsizeof(std::string)是相同的值。它不会提供字符串的运行时长度。若要使用memcpy进行序列化,请更改结构以包含字符数组,例如
char buffer[20]
或通过在结构上定义一个方法来计算所需序列化缓冲区的大小,该方法给出字节的运行时长度。 如果希望使用std::string之类的成员,则需要遍历结构的每个成员并序列化

memcpy(testout,(void*)&tstruct.test,sizeof(int));
memcpy(testout+sizeof(int),tstruct.name.c_str(),tstruct.name.length());

在这种情况下,针对整个结构的memcpy将不起作用。

尝试NULL终止字符串并发出换行符:

testout = new char[sizeof(test_struct) + 1];

memcpy(testout, &tstruct, sizeof(test_struct));
testout[sizeof(test_struct)] = '\0';
std::cout<< testout << std::endl;
testout=newchar[sizeof(test_struct)+1];
memcpy(testout和tstruct,sizeof(test_struct));
testout[sizeof(test_struct)]='\0';

std::coutTry NULL终止字符串并添加换行符。是的,我知道输出不会有用,但我仍然希望至少得到一些东西。我尝试分别存储这些值(如上所述),但它仍然不打印任何内容…@Mariska:你所做的是对编译器撒谎,它不会工作。
std::cout