LeetCode 43 题字符串相乘数组初始化为什么失败呢?-灵析社区

MastFancy

LeetCode 43题字符串相乘,乘好后的结果无法放入数组,且初始化并不成功,每次想将数组初始化的时候都会报错。 尝试了用calloc,memset,for循环对数组进行初始化,但是都失败了,直接定义进行初始化也不行,不知道是什么原因? 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 我的代码: void reverseString(char* str) { int length = strlen(str); int start = 0; int end = length - 1; while (start = 0;i--) A[i] = num1[i] - '0'; for(i = len2 - 1;i >= 0;i--) B[i] = num2[i] - '0'; //int* ans = (int*)calloc((len1 + len2 + 1),sizeof(int)); int* ans = (int*)malloc(sizeof(int) * (len1 + len2)); //memset(ans, 0, sizeof(int) * (len1 + len2 + 1)); ans[0] = 0; ans[1] = 0; for(i = 0;i 0 && ans[k] != 0)//去掉最高位的0 k--; char* res = (char*)malloc(sizeof(char) * (len1 + len2)); while(k >= 0){ res[len++] = ans[k--] + '0'; //printf("ans[%d] = %d\n",k,ans[k]); } res[len] = '\0'; return res; } 可以看到我对ans的初始化进行了多次尝试,现在已经直接去定义了,ans[1] = 0,但是却报错了,这是报的错误,说是堆缓冲区溢出了: ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/11a04d632b87b263b0859abc3666ba6d.png) 假如现在把ans[1] = 0,这行注释掉,会输出: ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241010/7852de7387f791771e4752f196afcd45.png) 通过各种尝试,仍旧初始化不成功。

阅读量:150

点赞量:0

问AI
我的问题,光顾着改上面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; }