添加2个整数指针数组时的垃圾整数

时间:2016-10-20 10:01:48

标签: c++ arrays pointers

我刚刚开始学习如何使用指针数组,并且我尝试了一些示例以了解更多关于它们但我很容易与它们混淆。所以,我尝试使用指针数组进行简单的算术计算。

用户将输入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;   

}

我尝试将两个字符串变量转换为整数指针数组,然后再将它们组合在一起

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 != '\0' || *q != '\0')
   {
       *(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);

}

在尝试调试此指针整数数组后,我仍然无法弄清楚它们有什么问题,我刚开始学习如何使用指针整数数组。

2 个答案:

答案 0 :(得分:2)

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

字符串终止符为'\0',等于零。这意味着当您执行'\0' - '0'时,结果为ASCII encoding} 0 - 48。这不是你想象的值。

这意味着在addInteger函数中,您可以检查整数数组中的'\0' 字符,这可能会超出范围。这会导致未定义的行为

或者,如果任何整数数组中存在实际零,则将停止短路。

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

您不能将字符串终止符用作整数数组的终止符。您需要使用字符串中的实际大小并检查它。或者,就像我在评论中提到的那样,使用适当的C ++容器和迭代器(或索引)。

答案 1 :(得分:0)

替换:

j = s1.length();

使用:

j = s1.length()-1;

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

此外,在stringtoInt中,您无法复制终止&#39; \ 0&#39;到intArray1intArray2,所以这个条件:

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

addInteger中的错误。将大小从stringtoInt传递到addInteger,并将while循环替换为该大小的for循环。