2012-12-08 50 views
-3

我的程序中遇到了一個問題。 我寫了這樣的代碼爲什麼我無法獲得矢量數據?

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; 
} 

,然後我寫了流動的功能,得到的char *

// get the struct from char* 
Data getStruct(char *msg) 
{ 
    **Data *data; 
    data =(Data*)msg; 
    return *data;** 
} 

,如果我的結構將getStruct()中使用的句子寫入getMsg()XXXXX行,我可以得到正確的數據結構。 但如果我調用函數getStruct()和味精是從功能的getMsg了,不好,我可以得到數據名,不能在矢量得到的數據,編譯器告訴我是錯的指針!

我想在調用函數Msg()後會有一些數據被實現,但我不知道爲什麼?以及我如何解決問題?

我的編譯器是MSVC 9.0

+4

你有什麼對'std :: string',你沒有反對'std :: vector'? – chris

+0

您發佈的代碼編譯正常。你應該發佈不能編譯的代碼。 –

+0

「編譯器告訴我是錯的指針!」闡述 –

回答

1

位於載體上使用memcpy不會讓你存儲在矢量數據,只是(實現特定的)向量內部的內容。這根本沒有用。

一般來說,從C++標準庫容器不能memcpy倒是到緩衝器和預期之後起作用。它們很可能包含指針或其他數據,這些數據在複製或移動到新位置時需要更新。

這樣的類一般有拷貝構造函數和你假定使用賦值運算符。

相關問題