C ++中的解引用结构数组项

时间:2014-09-19 18:47:30

标签: c++ arrays pointers vector copy

我在使用以下代码取消引用我的数组对象时遇到问题。 我想要做的是将* pstructDocuments的数组元素复制到全局向量中。我知道全局变量不是最好的方法,但出于测试目的,我想用结构元素填充全局向量。

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数组中DOCUMENT结构中存储的字符串...

更新: 当我复制数据时

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

1 个答案:

答案 0 :(得分:1)

从pstructDocuments [i]制作字符串的副本,而不是分配它们。分配它们时,您将指针存储到原始字符串而不是副本。如果原始字符串被销毁,则表示存在问题。