我有一个函数可以检查字符串中是否有任何非数字字符并返回一个bool。但是当我通过调试器运行它时,我会遇到分段错误。
这是有问题的功能。
bool checkInt(string myString){
for (int i=0; i<myString.length; i++){
if (!isdigit(myString[i])){
return false;
};
return true;
}
我在for和if语句的第二行和第三行得到段错误 如果它有帮助,这里也是构建日志。
C:\Users\conner\Desktop\programing\for dummes\main.cpp: In function 'bool checkInt(std::string)':
C:\Users\conner\Desktop\programing\for dummes\main.cpp:78:30: error: invalid use of member function (did you forget the '()' ?)
C:\Users\conner\Desktop\programing\for dummes\main.cpp:84:1: warning: control reaches end of non-void function [-Wreturn-type]
答案 0 :(得分:2)
编译器错误不是“段错误”。错误消息告诉您源代码中存在错误,编译器无法完成编译程序。
在您的情况下,错误似乎在使用myString.length
。这应该是myString.length()
,因为length
是一个成员函数,必须调用(()
}。
答案 1 :(得分:1)
i
被比较为大于,不小于。这导致myString[i]
内的字符串缓冲区外的访问和分段错误。此外,应使用myString.length()
代替myString.length
。 (根据manlio的评论)。
答案 2 :(得分:0)
更改为i < myString.length();
答案 3 :(得分:0)
您遇到了分段错误,因为您似乎运行了一个使用编译错误构建的对象模块。例如,MS VC ++允许这样做。
您的函数有编译错误。而不是正确的语法调用成员函数长度为
myString.length()
你写了
myString.length
循环语句中的条件也是无效的 而不是
for (int i=0; i>myString.length; i++){
至少应该
for (int i=0; i < myString.length; i++){
正确的功能可能看起来像
bool checkInt( const string &myString )
{
string::size_type i = 0;
while ( i < myString.length() && isdigit( myString[i] ) ) ++i;
return ( i == myString.length() );
}
您还可以使用标头std::all_of
<algorithm>
例如
inline bool checkInt( const string &myString )
{
return std::all_of( myString.begin(), myString.end(),
[]( char c ) { return ::isdigit( c ); } );
}
答案 4 :(得分:0)
你的代码错过了一个大括号。您应该测试i
是否小于myString.length
,而不是更高。关闭if分支后不需要分号。
bool checkInt(string myString)
{
for (int i=0; i < myString.length(); i++)
if(isdigit(myString[i]))
return false;
return true;
}