2014-09-19 40 views
0

我使用下面的代碼解除了引用數組對象的問題。 我想要做的是將* pstructDocuments的數組元素複製到全局向量中。我知道全局變量不是最好的方法,但爲了測試目的,我想用結構元素填充全局向量。C++中的取消引用結構數組項目

struct DOCUMENTS{ 
    wchar_t* TYPE; 
    wchar_t* PATH; 
} 

std::vector<DOCUMENTS> CdeskDocumentsVec 

void initDocuments(DOCUMENTS *pstructDocuments, int size){ 

    for (int i = 0; i < size; i++) 
    { 
    DOCUMENTS test1 = {}; 
    test1.PATH = pstructDocuments[i].PATH; 
    test1.TYPE = pstructDocuments[i].TYPE; 
    CdeskDocumentsVec.push_back(test1); 
    } 
} 

我已經測試了一些複製功能,但沒有按預期工作。因此,我希望有人能幫助我找到用於創建所有的數組元素的全局複製解決方案.....

DOCUMENTS test1 = {}; 
test1.PATH = L"PATH_TEXT"; 
test1.TYPE = L"TYPE_TEXT"; 
CdeskDocumentsVec.push_back(test1); 

作品具有確定和給出的字符串。

CdeskDocumentsVec.push_back(pstructDocuments[i]); 

不起作用。我認爲這與指針做..​​.

不工作意味着我無法通過矢量進行迭代並訪問存儲在文檔結構的pstructDocuments數組中的字符串...

UPDATE: 當我複製數據

const size_t len = wcslen(pstructDocuments[i].PATH); 
test1.PATH = new wchar_t[len + 1]; 
wcsncpy(test1.PATH, pstructDocuments[i].PATH, len + 1); 

似乎工作....

+3

您需要比「未按預期工作」更詳細。你期望什麼?它有什麼不同? – Barmar 2014-09-19 18:51:51

+0

我不認爲你需要'test1',你可以做'.push_back(pStructDocuments [i])'。 – Barmar 2014-09-19 18:52:20

+3

我也想知道你爲什麼這樣做。如果這是我認爲的那樣,你是否考慮過使用C++ 11的新初始化語法,它允許你像一個數組一樣初始化一個向量?也許不需要代碼來做這個副本,這取決於你想要完成什麼。 – 2014-09-19 18:53:41

回答

1

讓不是爲它們指定的來自pstructDocuments [I]字符串的副本。分配它們時,您將指針存儲爲原始字符串而不是複製。如果原始字符串被破壞,你有問題。

+0

感謝您的反饋。我認爲這正是問題所在。背景是,我將從外部程序中調用initDocuments函數,該函數提供第一個數組的指針和所屬元素/字符串。我猜這些指針在全局範圍內不可用...因此,我將嘗試複製wchar值。我已經嘗試過strcpy,哪個也不行。達到此目的的最佳方法是什麼? – Jochen 2014-09-19 19:55:16

+0

@Jochen'std :: wstring'是要走的路。更改'TYPE'和'PATH',其他代碼可以保持不變。 – crashmstr 2014-09-19 20:02:27

+0

我不知道是否從wchar_t更改爲wstring是一個選項,因爲我將使用結構「extern」... – Jochen 2014-09-19 20:31:05