我的程序遇到了一个问题。 我写了这样的代码
struct Data{
char name[10];
vector<char*> idList;
}
我写了流动的功能
// Convert Struct to char*
char* getMsg()
{
char *msg = (char*)malloc(100);
Data data;
// Set Value data's name
strcpy(data.name, "bodandhel");
// Set Value data's idList
data.idList.push_back("jams");
data.idList.push_back("bobss");
// Use memcpy function
memcpy(msg, &data, sizeof(Data));
XXXXXXXXXXXXXXXXXXXXXX
return msg;
}
然后我编写了flow函数来从char *
获取结构// get the struct from char*
Data getStruct(char *msg)
{
**Data *data;
data =(Data*)msg;
return *data;**
}
如果我在getMsg()XXXXX行中编写getStruct()中使用的句子,我可以得到正确的数据结构。 但如果我调用函数getStruct()并从getMsg函数调用msg,那么我可以得到数据名称,无法获取向量中的数据,编译器告诉我错误的指针!
我猜有一些数据在调用函数Msg()之后实现,但我不知道为什么?以及我如何解决这个问题?
我的编译器是MSVC 9.0
答案 0 :(得分:1)
在向量上使用memcpy
将无法获得向量中存储的数据,只能获取向量内部的(特定于实现的)内容。这根本没用。
通常,来自C ++标准库的容器不能memcpy
到缓冲区,并且应该在此之后起作用。它们可能包含指针或其他需要在复制或移动到新位置时更新的数据。
此类通常具有您假定使用的复制构造函数和赋值运算符。