如何将两个数组合并为第三个数组?C语言实现输出异常原因求解
数组合并代码异常输出原因分析
出现异常输出的原因有两点:
- 第二个遍历a2的循环仅对变量j做了自增操作,写入a3的索引i始终保持第一个循环结束后的数值5,导致a2的5个元素都被重复写入
a3[5]的位置,最终该位置的值仅保留a2的最后一个元素5,a2的前4个元素全部被覆盖丢失。 - a3数组的索引6~9位置从未被赋值,属于未初始化的栈内存,存储的是内存中的随机脏数据,因此输出时会出现无意义的大数字。
修正方法
只需在第二个循环中新增i自增的逻辑,同步移动a3的写入索引即可,修改后的代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 30 int main(){ int a1[]={1,2,3,4,5}; int a2[]={1,2,3,4,5}; int a3[10]; int i=0; int k=0; int j=0; while(i<sizeof(a1)/sizeof(int)) { a3[i]=a1[i]; i++; } while(j<sizeof(a2)/sizeof(int)) { a3[i]=a2[j]; j++; i++; // 新增此行同步移动a3的写入索引 } while(k<sizeof(a3)/sizeof(int)) { printf("%d ",a3[k]); k++; } return 0; }
修正后输出结果为1 2 3 4 5 1 2 3 4 5 ,符合合并数组的预期。
内容的提问来源于stack exchange,提问作者A16
相关产品推荐
相关产品推荐

