gpt4 book ai didi

c++ - 如何修复 'std::logic_error' what(): basic_string::_M_construct null not valid 错误?

转载 作者:行者123 更新时间:2023-12-04 01:14:55 29 4
gpt4 key购买 nike

我正在尝试检查输入字符串是字母数字还是大写或空。如果输入字符串在上述出现故障的字符串中,我只想返回 false/0 否则与工作正常的程序的其余部分一起工作。我的程序块有问题:

std::string myfunc(std::string input){
std::string b="";

if (!input.size()) return 0;
for (int i = 0; i < input.size(); i++){

if ( input[i] < 'a' || input[i] > 'z'|| isalpha(input[i]) || isupper(input[i]) ) return 0;
}
b = input;
//just copy the input string for now.
return b;
}

我把这个函数称为
int main(){
std::string input="Somthing";
std::cout << myfunc(input)<< std::endl;
return 0;
}

收到以下错误?
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)

该程序在没有这两个边缘情况的情况下运行良好。我无法理解错误并找到解决方法?关于我做错了什么的任何建议?

最佳答案

问题在于函数中的两个 return 0; 语句。该函数返回一个 std::string ,它没有接受 int 作为输入的构造函数。但是,它确实有一个接受 const char * 指针的构造函数,0 可以隐式转换为该指针。但是,使用空 std::string 指针构造 char * 未定义行为 ,并且您的实现选择抛出您没有在代码中捕获的 std::logic_error 异常。

在这种情况下,我会简单地返回一个空白字符串:

std::string myfunc(const std::string &input){
if (input.empty()) return "";
for (int i = 0; i < input.size(); ++i){
char ch = input[i];
if ( !((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')) ) return "";
}
return input;
}

然后调用者可以检查返回值是否为空,如果它想:
if (myfunc(input).empty())
// error, do something
else
// OK, do something else

使用返回 bool 而不是 std::string 的函数会更好:
bool isvalid(const std::string &input){
if (input.empty()) return false;
for (int i = 0; i < input.size(); ++i){
char ch = input[i];
if ( !((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')) ) return false;
}
return true;
}

// if you still needed this function for something...
std::string myfunc(const std::string &input){
if (!isvalid(input)) return "";
return input;
}

if (!isvalid(input))
// error, do something
else
// OK, do something else

关于c++ - 如何修复 'std::logic_error' what(): basic_string::_M_construct null not valid 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54429231/

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