C++ 处理字符串时出现超级奇怪的错误

C++ 处理字符串时出现超级奇怪的错误,c++,string,function,binary,syntax-error,C++,String,Function,Binary,Syntax Error,我正在尝试创建一个函数,将二进制数字字符串转换为十进制整数。下面代码的奇怪之处在于,当第//cout行在BinaryToDecimal中有未定义的行为时,因为变量解决方案可能会在未初始化的情况下使用 未初始化的局部变量将具有不确定的值,即它们的值看起来是随机的。您在BinaryToDecimal中具有未定义的行为,因为变量解决方案可能在未初始化的情况下使用 未初始化的局部变量将具有不确定的值,即它们的值看起来是随机的。正如Joachim所说,您的解决方案变量未初始化,因此当字符串既不是0也不是1

我正在尝试创建一个函数,将二进制数字字符串转换为十进制整数。下面代码的奇怪之处在于,当第//cout行在BinaryToDecimal中有未定义的行为时,因为变量解决方案可能会在未初始化的情况下使用

未初始化的局部变量将具有不确定的值,即它们的值看起来是随机的。

您在BinaryToDecimal中具有未定义的行为,因为变量解决方案可能在未初始化的情况下使用


未初始化的局部变量将具有不确定的值,即它们的值看起来是随机的。

正如Joachim所说,您的解决方案变量未初始化,因此当字符串既不是0也不是1时,您可能会出现奇怪的行为,例如+=操作中的整数溢出。我猜想,当输出处于活动状态时,它工作的事实是由于输出指令的一些奇怪的副作用,导致某些寄存器包含0,而该寄存器是解决方案的值的来源。了解这方面的编译器设置并查看这部分代码的汇编代码可能会有所启发。 您可以替换:

int BinaryToDecimal(string & binaryString){
    int solution;

    if (binaryString == "0") solution = 0;
    if (binaryString == "1") solution = 1;
    ...
与:


由于您所做的特殊情况处理是由之后的循环优雅地处理的。

正如Joachim所说,您的解决方案变量未初始化,因此当字符串既不是0也不是1时,您可能会在+=操作中出现奇怪的行为,例如整数溢出。我猜想,当输出处于活动状态时,它工作的事实是由于输出指令的一些奇怪的副作用,导致某些寄存器包含0,而该寄存器是解决方案的值的来源。了解这方面的编译器设置并查看这部分代码的汇编代码可能会有所启发。 您可以替换:

int BinaryToDecimal(string & binaryString){
    int solution;

    if (binaryString == "0") solution = 0;
    if (binaryString == "1") solution = 1;
    ...
与:


因为您所做的特殊情况处理是由您的循环优雅地处理的。

好的,谢谢:!但是当我用这个cout的时候它怎么会起作用呢?好的,谢谢!但是当我用这个cout的时候它怎么会起作用呢?
int BinaryToDecimal(string & binaryString){
    int solution = 0;
    ...