为什么我无法获取矢量数据?

时间:2012-12-08 17:25:12

标签: c++

我的程序遇到了一个问题。 我写了这样的代码

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

1 个答案:

答案 0 :(得分:1)

在向量上使用memcpy将无法获得向量中存储的数据,只能获取向量内部的(特定于实现的)内容。这根本没用。

通常,来自C ++标准库的容器不能memcpy到缓冲区,并且应该在此之后起作用。它们可能包含指针或其他需要在复制或移动到新位置时更新的数据。

此类通常具有您假定使用的复制构造函数和赋值运算符。