取消引用C++中的结构数组项

Dereference structure array items in C++

本文关键字:结构 数组 引用 C++ 取消      更新时间:2023-10-16

使用以下代码取消引用数组对象时遇到问题。我想做的是将*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);

它似乎奏效了。。。。

从pstructDocuments[i]中复制字符串,而不是分配它们。当您分配它们时,您存储的指针指向原始字符串,而不是副本。如果原始字符串被破坏,您就有问题了。