我正在制作一个程序,用于测试字符串数组中字符串的存在。我做了一个简单的功能:
bool isMemberOfArrayStr(std::string str, std::string array[256]){
for(int i=0;array->length()<10;i++){
if(array[i]==str){
ret=true;//A global variable that will be reset to false after the function call
}
}
return ret;
}
函数的定义不会导致错误,但调用:
if(neighbors[2] == isMemberOfArrayStr(neighbors[2], validTokens))
{
std::cout <<"true"
}
导致运行时错误“Segmentation fault:11”。 我不确定问题是什么,帮助会很好。
答案 0 :(得分:1)
array->length();
不是数组的长度。这是数组中第一个std :: string的长度。 考虑使用std :: vector of std :: string。
除非订单在容器中很重要,否则最好选择std :: set(multiset)。
答案 1 :(得分:1)
bool isMemberOfArrayStr(std::string str, std::string array[256])
衰败到
bool isMemberOfArrayStr(std::string str, std::string* array)
正确的原型是
bool isMemberOfArrayStr(std::string str, std::string (&array)[256])
但您可以使用std::array
或std::vector
语法更好(更直观)。
然后array->length()
不是256
,而是数组第一个字符串的长度。
您的功能可能会被重写(C ++ 11):
bool isMemberOfArrayStr(const std::string& str, std::string (&array)[256]) {
ret = std::find(std::begin(array), std::end(array), str) != std::end(array);
return ret;
}
C ++ 03:
bool isMemberOfArrayStr(const std::string& str, std::string (&array)[256]) {
ret = std::find(array, array + 256, str) != array + 256;
return ret;
}
我认为你应该从这个功能中删除ret
。
答案 2 :(得分:0)
bool isMemberOfArrayStr(std::string str, std::string array[256]){
for(int i=0;array->length()<10;i++){
^^^^^^^^^^
if(array[i]==str){
ret=true;//A global variable that will be reset to false after the function call
}
}
return ret;
}
你正在比较常数值。只有当array-&gt; length()&lt; 10然后无限次地执行它时,才执行for循环。还
array->length()
是数组中第一个元素(如果有的话)的长度。