将所有非零项从二维数组保存到另一个一维数组中

时间:2015-04-21 16:22:42

标签: c arrays function

A是一个2D数组,我想将所有非零项存储在一个名为B的新1D数组中...这是我调用的函数,但是它崩溃的程序,我不知道我做错了什么?

int doSomething(int A[N][N], int B[ ], int C[ ]){

    int i,j;
    int k=0;
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
            if (A[i][j] != 0){
                B[k]= A[i][j];
                k++;
            }
        }
    }
    for (i = 0; i < 4; i++) {
        printf("%d ", B[i]);
    }
}

2 个答案:

答案 0 :(得分:0)

问题是4内的for(i = 0; i < 4; i++)。可能B数组的长度小于4,因此会导致错误。因为您正在访问超出范围的索引。所以你应该使用for (i = 0; i < k; i++)代替。

答案 1 :(得分:0)

有两个问题。

首先,@ hamed说'我'应该小于'k'而不是小于'4'

其次你假设它是一个方形数组,可能不是这种情况(行和列的长度相同)

int doSomething (int A[r][c], int B[ ]){

    int k=0;
    for(; r>0; r--){
        for(; c>0; c--){
            if (A[i][j] != 0){
                B[k]= A[i][j];
                k++;
            }
        }
    }
    for (i = k-1; i >= 0; i--) {
        printf("%d ", B[i]);
    }
return B;
}

注意:为了提高效率,最好在这种情况下向后循环,你忘了返回B,而C(据我所知)是不合情理的