我的问题,光顾着改上面ans的空间分配了,忘记改下面res的空间分配了,而且我的代码部分, for(i = len1 - 1;i >= 0;i--) A[i] = num1[i] - '0'; for(i = len2 - 1;i >= 0;i--) B[i] = num2[i] - '0'; 这里也有问题,应该再定义一个int m = 0,n = 0;改为 for(i = len1 - 1;i >= 0;i--) A[m++] = num1[i] - '0'; for(i = len2 - 1;i >= 0;i--) B[n++] = num2[i] - '0'; 一下为修改后的代码: char* multiply(char* num1, char* num2) { int len = 0; int len1 = 0; int len2 = 0; int temp = 0,t = 0; int i = 0,j = 0,m = 0,n = 0; len1 = strlen(num1); len2 = strlen(num2); char* shortAns = (char*)malloc(sizeof(char) * 2); shortAns[0] = '0'; shortAns[1] = '\0'; if((len1 == 1 && num1[0] == '0') || (len2 == 1 &&num2[0] == '0')) return shortAns; int* A = (int*)malloc(sizeof(int) * len1); int* B = (int*)malloc(sizeof(int) * len2); for(i = len1 - 1;i >= 0;i--){ A[m++] = num1[i] - '0'; } for(i = len2 - 1;i >= 0;i--) B[n++] = num2[i] - '0'; int* ans = (int*)malloc((len1 + len2 +1)*sizeof(int)); memset(ans,0,sizeof(int) * (len1 + len2 + 1)); //printf("a[1] = %d",ans[1]); for(i = 0;i 0 && ans[k] == 0){//去掉最高位的0 k--; } char* res = (char*)malloc(sizeof(char) * (len1 + len2 + 1)); while(k >= 0){ res[len++] = ans[k--] + '0'; } res[len] = '\0'; return res; }