我是C编程新手,我的代码有一个错误。错误是:
运行完成;分段故障;核心转储;实时:340ms;用户:0ms;系统:0ms
这是我的代码:
#include <stdio.h>
int main() {
int a[4] = {5,9,13,18};
int b[4] = {7,10,14,20};
int i,j,k,l;
i = 0; j = 0; k = 0;
int result[8];
while(i < 4 && j < 4){
if(a[i]<b[i]) {
result[k] = a[i]; k++; i++;
}
else { result[k] = b[i]; k++; i++; }
}
while(i < 4){
result[k] = a[i];
k++; i++;
}
while(j < 4){
result[k] = b[i];
k++; i++;
}
for(l=0; l<8; l++){
printf("Element[%d] : %d \n", l, result[l]);
}
return 0;
}
最佳答案
您需要为每个源数组使用单独的索引。您只使用一个,而从不递增另一个,因此会溢出目标数组的末尾并调用未定义的行为。
您的代码中已经存在两个索引,但是您没有正确使用j
。您的代码应该如下所示:
while(i < 4 && j < 4){
if(a[i]<b[j]) {
result[k] = a[i]; k++; i++;
}
else {
result[k] = b[j]; k++; j++;
}
}
您需要在while循环中对
j
进行类似的更改。作为一种风格,我也会利用后增强运算符,这在C中非常习惯:
while(i < 4 && j < 4){
if(a[i]<b[j]) {
result[k++] = a[i++];
}
else {
result[k++] = b[j++];
}
}
关于c - 在C编程中合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22097753/