问题是,尽管每次调用addnums函数时我都会增加指针,但addednums数组只包含一个字符,即最后一个已计算的字符。为什么会这样?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

/* run this program using the console pauser or add your own getch,system("pause") or input loop */

int addHugeNumbers(char *a1, char *a2,char *res) ;
int checkifnum(char *c1) ;
void addnums(char *a1, char *a2, char *res, int *ip) ;

int main(int argc, char *argv[]) {

char firstnum[255],secondnum[255],addednum[255] = {0};

/*Óôçí ðåñßðôùóç ðïõ ï ÷ñÞóôçò äþóåé ôÝôïéïõò áñéèìïýò þóôå íá ÷ñåéáóôåß êáé    256 bit ôüôå åìöáíßæåé
ôïí ìÝãéóôï áñéèìü ðïõ ìðïñåß ìå 255 bit*/

printf("Give the first number : "); scanf("%s",&firstnum);
printf("Give the second number : "); scanf("%s",&secondnum);
printf("%s %s\n", firstnum,secondnum) ;
printf("%d",addHugeNumbers(firstnum,secondnum,addednum)) ;
return 0;
}

int addHugeNumbers(char *a1, char *a2,char *res){
int carry,len1,len2,*ip,i;
ip = &carry ;
if ((checkifnum(a1) == 0)||(checkifnum(a2) == 0)) return 0;
len1 = strlen(a1) - 1;
len2 = strlen(a2) - 1;
a1 += strlen(a1) - 1;
a2 += strlen(a2) - 1;
//printf("%c %c\n",*a1,*a2) ;
do{
    addnums(a1,a2,res,ip) ;
    len1--;len2--;
    if (len1!=-1 && len2!=-1) a1--,a2--;
}while(len1>-1 && len2>-1) ;
printf("%s\n",res) ;
return 1;
}

void addnums(char *a1, char *a2, char *res, int *ip){
*res++ = (char)((*a1 - '0' + *a2 - '0' + *ip) % 10 + '0');
*ip = (*a1 - '0' + *a2 - '0' + *ip) / 10;
}

int checkifnum(char *c1){
while (*c1) {
    if (isdigit(*c1++) == 0) return 0;
}
return 1;
}

最佳答案

您试图递增的指针是addnums()中的本地指针,它是addHugeNums()中指针的副本,每次都指向同一个位置。
在将指针的副本发送到addHugeNums()之前,尝试在addnums()中增加指针。例如,可以尝试以下操作:

int addHugeNumbers(char *a1, char *a2,char *res){
int carry = 0;
int len1,len2,*ip;
ip = &carry ;
if ((checkifnum(a1) == 0)||(checkifnum(a2) == 0)) return 0;
len1 = strlen(a1) - 1;
len2 = strlen(a2) - 1;
a1 += strlen(a1) - 1;
a2 += strlen(a2) - 1;
//printf("%c %c\n",*a1,*a2) ;
char* tmp = res;
do{
    addnums(a1,a2,tmp,ip) ;
    tmp++;
    len1--;len2--;
    if (len1!=-1 && len2!=-1) a1--,a2--;
}while(len1>-1 && len2>-1) ;
printf("%s\n",res) ;
return 1;
}

为了进一步澄清,您的代码在每次迭代中都执行了以下操作:
它调用函数addnums()并将指针res的副本作为参数发送。在addnums()中,您增加了res的副本(保留原来的res未更改),然后退出该函数时调用该副本不再存在。
在下一次迭代中,执行完全相同的操作。

10-08 09:30