我试图将一个数组(简单来说是大小为2)作为参数传递给方法“writeToVector()”。此方法将字符串值分配给向量。
我编写了一个独立的测试程序(如下)。但是当我将它集成到我的真实程序中时它不起作用。
我的程序下面有什么问题吗?它只是“偶然”工作吗?
我不确定“writeToVector()”方法的签名是否正确。
typedef std::vector<std::string> ExtensionType;
void writeToVector(ExtensionType *extensions)
{
extensions[0].push_back("A");
extensions[1].push_back("B");
}
void main(void)
{
ExtensionType extensions[2];
getExtensions(extensions);
for(// loop through array of vectors)
{
for(// loop through vector's elements)
{
// print vector contents
}
}
}
答案 0 :(得分:0)
你的函数是危险的,因为假设传递给它的指针指向大小为2或更大的数组的开头。如果不是这种情况,它将陷入堆中。因此,最好传递保证大小为2的内容,例如std::array<EtnensionType, 2>
。
void writeToVector(std::array<ExtensionType, 2>& extensions)
{
extensions[0].push_back("A");
extensions[1].push_back("B");
}
然后
int main()
{
std::array<ExtensionType, 2> extensions;
getExtensions(extensions);
}
如果你真的被阵列困住了,那么请确保它只是2号:
void writeToVector(ExtensionType (&extensions)[2])
{
extensions[0].push_back("A");
extensions[1].push_back("B");
}
int main()
{
ExtensionType extensions[2];
getExtensions(extensions);
}
答案 1 :(得分:0)
我尝试了以下方式:
void writeToVector(ExtensionType extensions [],int size)
{
for(int i=0,i<size;i++)
{
extensions[i].push_back("A");
}
}
int main()
{
const int ARRAY_SIZE=2;
ExtensionType extensions[ARRAY_SIZE];
getExtensions(extensions,ARRAY_SIZE);
}