我正在制作一个程序,该程序将测试字符串数组中的字符串存在。我做了一个简单的功能:
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"
}
导致运行时错误"分段故障:11"。我不确定问题是什么,帮助会很好。
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
。
array->length();
不是数组的长度。这是阵列中的第一个std ::字符串的长度。考虑使用std :: vector of std :: string。
除非该订单在容器中很重要,否则最好选择一个std :: set(multiSet)。
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;
}
您正在比较恒定值。您仅在数组 -> length()&lt; 10然后无限地执行循环时执行循环。也
array->length()
是数组中的第一个元素(如果有!)的长度。