C++ 为什么使用字符串变量;sum";没有存储任何数据,程序也没有给出任何输出 int l,s,j,k,进位=0; 字符串num1,num2,和; cin>>num1>>num2; l=num1.size(); s=num2.size(); 对于(j=l-1;j>=0;j--) { k=(num1[j]-'0')+(num2[j]-'0')+进位; cout

C++ 为什么使用字符串变量;sum";没有存储任何数据,程序也没有给出任何输出 int l,s,j,k,进位=0; 字符串num1,num2,和; cin>>num1>>num2; l=num1.size(); s=num2.size(); 对于(j=l-1;j>=0;j--) { k=(num1[j]-'0')+(num2[j]-'0')+进位; cout,c++,C++,就在变量声明之后,您的sum变量是一个空字符串。您试图访问它的jth元素-这是数组索引溢出,是一种未定义的行为 解决方案是使用某些东西初始化字符串,或使用串联而不是更改字符,如下所示: int l, s, j, k, carry=0; string num1, num2, sum; cin >> num1 >> num2; l = num1.size(); s = num2.size(); for(j=l-1; j>

就在变量声明之后,您的
sum
变量是一个空字符串。您试图访问它的
j
th元素-这是数组索引溢出,是一种未定义的行为

解决方案是使用某些东西初始化字符串,或使用串联而不是更改字符,如下所示:

    int l, s, j, k, carry=0;
    string num1, num2, sum;

    cin >> num1 >> num2;
    l = num1.size();
    s = num2.size();

    for(j=l-1; j>=0; j--)
    {
        k = (num1[j]-'0') + (num2[j]-'0') + carry;
        cout << k<<endl;
        carry = k/10;
        k%=10;
        sum[j]= '0' + k;
    }

    cout  << sum << endl;
UP:此类修复程序将以相反的顺序将结果写入字符串,因此,要获得正确的字符串,还应添加

sum += (char)('0' + k);
在循环之后


而且,您的代码假定
sum
长度与两个参数的长度完全相同,这可能是错误的。

在变量声明之后,您的
sum
变量是一个空字符串。您试图访问它的
j
第个元素-这是数组索引溢出,是一种未定义的行为。

解决方案是使用某些东西初始化字符串,或使用串联而不是更改字符,如下所示:

    int l, s, j, k, carry=0;
    string num1, num2, sum;

    cin >> num1 >> num2;
    l = num1.size();
    s = num2.size();

    for(j=l-1; j>=0; j--)
    {
        k = (num1[j]-'0') + (num2[j]-'0') + carry;
        cout << k<<endl;
        carry = k/10;
        k%=10;
        sum[j]= '0' + k;
    }

    cout  << sum << endl;
UP:此类修复程序将以相反的顺序将结果写入字符串,因此,要获得正确的字符串,还应添加

sum += (char)('0' + k);
在循环之后


而且,您的代码假定
长度与两个参数的长度完全相同,这可能是错误的。

您不认为如果使用字符串串联,您将以相反的顺序写入结果数吗?您不认为如果使用字符串串联,您将以相反的顺序写入结果数吗路?