C 中的stol()函数中的错误处理

error handling in stol() function in c++

本文关键字:错误 处理 函数 中的 stol      更新时间:2023-10-16

这是我使用的代码:

int cap(long n){
    long sq = n*n;
    string num = to_string(sq),s1,s2;
    cout << num;
    for(int i=1;i<=num.length();i++){
        s1 = num.substr(0,i);
        s2 = num.substr(i,num.length()-i);
        string::size_type sz=0;  
        long n1 = stol (s1,&sz,0);
        long n2 = stol (s2,&sz,0);
        if(n1+n2==n){
            return 1;
        }
    }
    return 0;
}

这是我遇到的错误。此类错误的任何提示?

循环条件是错误的,您应该设置

for(int i=1;i<num.length();i++){

,该程序不会崩溃。不过,我无法要求结果是否是所需的结果。

i=num.length()s2

s2 = num.substr(i,num.length()-i); 

相同
s2 = num.substr(i, 0);  //for i=num.length()
                   ^~~~~length of substring is zero

然后,此空字符串s2的形式传递给stol,因此导致错误" 终止",在抛出了'std :: invalid_argument'invalid_argument'" " " <</p>

long n2 = stol (s2, &sz, 0);
                 ^~~~~Empty string.

demo