gpt4 book ai didi

C++ isMember 函数崩溃

转载 作者:行者123 更新时间:2023-11-28 02:57:51 25 4
gpt4 key购买 nike

我正在编写一个程序来测试字符串数组中是否存在字符串。我做了一个简单的函数来做到这一点:

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)

正确的原型(prototype)是

bool isMemberOfArrayStr(std::string str, std::string (&array)[256])

但您可以使用语法更好(更直观)的 std::arraystd::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

关于C++ isMember 函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com