我是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/

10-10 06:45