抛出' std :: logic_error'的实例后终止调用basic_string :: _ S_construct null无效

时间:2017-07-09 07:27:40

标签: c++ string exception

string Solution::findDigitsInBinary(int A) {
    int i, j, rem;

    if(A == 0) {
        return 0;
    }
    else {
        string res="";

        while(A > 0) {
            rem = A % 2;
            res = res + to_string(rem);
            A = A / 2;
        }

        return std::string(res.rbegin(), res.rend());
    }
}

如何解决此问题

3 个答案:

答案 0 :(得分:1)

由以下原因引起的问题:

if(A == 0) {
    return 0;
}

A == 00尝试construct an std::string时。这是相同的 - 因为隐式构造函数调用 - 来:

return std::string(0);

在这种情况下,0表示空指针,这是非法的。错误消息

  

basic_string :: _ M_construct null无效

意思完全相同。

如果您希望在A == 0时返回零,则可以通过将return 0更改为:

来解决此问题
return "0";

答案 1 :(得分:0)

return 0;调用隐式字符串构造函数,接受指向char return std::string(const char *(0))的指针。此指针不允许为null。要返回空字符串,请写return std::string();

答案 2 :(得分:0)

由于该方法预计会返回std::string,因此如果std::string(0)std::string(NULL),您将返回A == 0true

要返回std::string的默认值 - 我猜 - 只需return std::string();而不是return 0;