添加2个整型指针数组时产生垃圾整型

garbage integer when adding 2 integer pointer array

本文关键字:整型 数组 2个 指针 添加      更新时间:2023-10-16

我刚刚开始学习如何使用指针数组,我正在尝试的例子,以了解更多关于他们,但我很容易混淆。因此,我尝试使用指针数组做一个简单的算术计算。

用户将输入2个字符串变量进行相加。然后将字符串变量反转。

string reverseString(string s1)
{
   int i = 0;
   int j;
   char temp;
   j = s1.length() - 1;
   while (i < j)
   {
       temp = s1[i];
       s1[i] = s1[j];
       s1[j] = temp;
       i++;
       j--;
   }  
   return s1;   
}

我试图将2个字符串变量转换成一个整数指针数组,然后将它们加在一起

void stringtoInt(string& s1, string& s2)
{
   int size1 = s1.size();
   int size2 = s2.size();
   intPtr intArray;
   intPtr intArray2;
   intArray = new int[size1];
   intArray2 = new int[size2];

   for (int i = 0; i < size1; i++)
   {
       intArray[i] = s1[i] - '0';
   }

   for (int i = 0; i < size2; i++)
   {
       intArray2[i] = s1[i] - '0';
   }
   addInteger(intArray, intArray2);
}

我在一个函数中传递了2个整数数组,并试图进行一些加法计算

void addInteger(intPtr intArray, intPtr intArray2)
{
   int *p = intArray;
   int *q = intArray2;
   intPtr total = new int[MAX];
   int i = 0;
   int sum = 0;
   int carried = 0;
   while (*p != '' || *q != '')
   {
       *(total + i) = *p + *q + carried;
       if(*(total + i) > 9)
       {
           *(total + i) %= 10;
           carried = 1;
       }
       else 
        carried = 0;    
       i++;
       p++;
       q++;         
   }     
   printArray(total, i);
}

这就是我读取指针数组

的方式
void printArray(intPtr total, int size)
{    
    for(int i = 0; i < size; i++)
        cout << *(total + i);
}

在尝试调试这个指针整型数组后,我仍然不知道他们出了什么问题,我刚刚开始学习如何使用指针整型数组

问题是如何从字符串中使用字符串终止符并将它们放入整数数组中。

字符串终止符为'',等于0。这意味着当你做'' - '0'的结果是(用ASCII编码)0 - 48。我猜这不是你期望的值。

这意味着在您的addInteger函数中,您检查整数数组中的'' 字符,您可能会越界。这会导致未定义行为

或者,如果在任何整数数组中有一个实际的零,您将立即停止。

无论哪种方法,你都会得到错误的结果。

不能使用字符串结束符作为整数数组的结束符。你需要使用字符串的实际大小并检查。或者,像我在注释中提到的那样,使用适当的c++容器和迭代器(或索引)。

Replace:

j = s1.length();

:

j = s1.length()-1;

字符串的最后一个字符是length-1,而不是length

同样,在stringtoInt中,您不会将终止符''复制到intArray1intArray2中,因此此条件:

while (*p != '' || *q != '')

addInteger中是错误的。将stringtoInt的大小传递给addInteger,并用该大小的for循环替换while循环。