使用C旋转阵列

时间:2017-03-14 07:05:46

标签: c

为什么此代码会出现分段错误错误?

这是使用for循环的代码,用于在stdin中左移移给定数组,而不是旋转。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int *rotatebyone(int *array_input, int len_of_arr);
void rotate(int *array_input, int len_of_arr, int no_of_rota);
int main()
{

    int array1[] = { };
    int array2[] = { };
    int array3[] = { };
    int i = 0, j = 0, size_of_arr = 0, no_of_rotations = 0;

    for (i = 0; i < 2; i++)
    {
        scanf("%d", &array1[i]);
        //printf("%d", array1[i]);
    }

    size_of_arr = array1[0];
    no_of_rotations = array1[1];

    for (i = 0; i < size_of_arr; i++)
    {
        scanf("%d", &array2[i]);
        //printf("%d ", array2[i]);
    }
    rotate(array2, size_of_arr, no_of_rotations);

    return 0;
}
void rotate(int *array_input, int size_of_array, int no_of_rota)
{
    int h = 0;
    for (h = 0; h < no_of_rota; h++)
    {
        rotatebyone(array_input, size_of_array);
    }
    for (h = 0; h < size_of_array; h++)
        printf("%d ", array_input[h]);
}

int *rotatebyone(int *array_input1, int len_of_arr)
{
//int array3 = {};
    int j = 0, k = 0;
    int temp = 0;
    temp = array_input1[0];
    for (k = 0; k < len_of_arr - 1; k++)
    {
        array_input1[k] = array_input1[k + 1];
    }
    array_input1[len_of_arr - 1] = temp;
    return array_input1;
}

1 个答案:

答案 0 :(得分:0)

对于array2 [],您没有提到它的大小。它可以是evn 1000或10000.更好地使用int * array2并通过malloc分配内存。 Reg array1,它可以初始化为int array1 [2],因为我们知道array1有两个元素。