【发布时间】:2014-09-19 18:47:30
【问题描述】:
我在使用以下代码取消引用我的数组对象时遇到问题。 我想做的是将 *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);
它似乎工作....
【问题讨论】:
-
您需要更详细,而不仅仅是“没有按预期工作”。您的预期是什么,有何不同?
-
我觉得你不需要
test1,你可以用.push_back(pStructDocuments[i])。 -
我也想知道你为什么这样做。如果是我认为的那样,您是否考虑过 C++11 的新初始化语法,它允许您像数组一样初始化向量?也许不需要代码来做这个复制,这取决于你想要完成的事情。
-
不知道究竟是什么不起作用,你只做数组的浅拷贝会不会是个问题?如果
pstructDocuments中的字符串在initDocuments之后被释放,则CdeskDocumentsVec中的指针无效。
标签: c++ arrays pointers vector copy