易错点指针从最后一位开始各个循环条件不要写错了malloc注意判断空并且要多申请两个字节进位逻辑翻转堆区的内存保存的值#includestdio.h#includestdlib.h#includestring.hchar* addStrings(char* num1, char* num2) {int len1 strlen(num1);int len2 strlen(num2);char* p1 num1 len1 - 1;//减去本身指向个位char* p2 num2 len2 - 1;char* d (char*)malloc((len1 len2 ? len1 : len2) 2);//为啥要加二呢if (d NULL) {printf(malloc申请失败\n);return NULL;}//原因是有进位和\0末尾int i 0;char carry 0;//进位while (ilen1||ilen2||carry1) {char k 0, l 0;if (i len1) {//i要取到lenk *(p1-i) - 0;}if (i len2) {l *(p2-i) - 0;}char sum k l carry;d[i] sum % 10 0;if (sum 10)carry 1;else carry 0;i;}//翻转堆区的数据int left 0, right i - 1;while (left right) {char temp d[left];d[left] d[right];d[right] temp;left, right--;}d[i] \0;return d;}int main() {char arr[100];char brr[100];printf(请输入两个数字\n);while (scanf(%s %s, arr, brr) ! EOF) {printf(它们相加的结果是);char* p addStrings(arr, brr);printf(%s,p);free(p);printf(\n);printf(请输入两个数字\n);}return 0;}
