可变数量的参数函数运行时错误
Posted
技术标签:
【中文标题】可变数量的参数函数运行时错误【英文标题】:Variable number of arguments function run time error 【发布时间】:2013-10-09 23:56:58 【问题描述】:这应该返回一个包含所有 word1 参数的向量,其中包含 sub 作为子字符串,但我不断收到错误 "第 779 行向量下标超出范围"
vector<string> search(int num1, string sub, string word1 ...)
va_list arguments;
string pword = "";
pword.assign(word1);
vector<std::string> vec;
vec.push_back(sub);
vec[0] = sub;
va_start(arguments, word1);
for (int i = 1; i <= num1; i++)
for(int x = 0; x < pword.length(); x++)
for(int y = 0; y < sub.length(); y++)
if(y+x < pword.length())
if(pword[y+x] == sub[y])
continue;
else
break;
else
break;
vec.push_back(pword);
pword = va_arg(arguments, string);
va_end(arguments);
return vec;
【问题讨论】:
没有理由在 c++ 中使用 var args 你的代码中没有任何地方索引到vec
刚刚改好了
【参考方案1】:
所以你在你的例子中展示了这个:
vector<std::string> vec;
vec.push_back(sub);
vec[0] = sub;
您之前已将最后一行注释掉:
vector<std::string> vec;
vec.push_back(sub);
//vec[0] = sub;
我敢打赌,您的真实代码,即不起作用的代码,是这样的:
vector<std::string> vec;
vec[0] = sub;
这不起作用,因为您的矢量没有元素。索引到矢量不会为您创建一个点。它必须小于集合的大小。该行的大小为0,因此不起作用。
你可以用一个初始容量来初始化向量:
const size_t count = 1;
vector<std::string> vec(count);
vec[0] = sub; // works!
【讨论】:
当我这样做时,我遇到了一个不同的运行时错误,这不是向量类引发的异常。这确实让我更接近了,尽管谢谢。打印了一些东西【参考方案2】:将函数原型改为:
vector <string> search (string sub, const vector <string> & words)
在那之后,事情应该会很好地落实到位。设置并清空vector <string>
结果。遍历单词,找到子字符串。找到一个后,将单词推入结果中。
返回结果(总是)。
【讨论】:
我必须使用可变数量的参数 @user1767077 为什么必须这样做?传递向量是一个更好的设计。以上是关于可变数量的参数函数运行时错误的主要内容,如果未能解决你的问题,请参考以下文章