C编程:将数字读入数组时出现分段错误

时间:2014-10-23 04:19:06

标签: c arrays for-loop

我很困惑,正在寻找一些看似简单的帮助。我试图在我的主要设置数组的大小然后调用我的函数让用户将数字输入到该大小的数组。运行程序后,我得到输出:

Enter how many: (users length of array)
Enter data: (users first number)
Segmentation fault (core dumped)

我想知道我做错了什么:

#include <stdio.h>
int main(void)
{
    int length, arr, size;

    printf("enter how many: ");
    scanf("%i", &length);

    readArray(arr, length);

    return 0;
}

int readArray(int arr[50], int length)
{
    int i, data;

    for (i =0; i < length; ++i)
    {
        printf("enter data %i: ", i);
        scanf("%i", data);
        arr[i] = data;
    }
    return 0;   
}

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

按以下方式更改您的代码

#include <stdio.h>

void readArray( int arr[], int length );

int main(void)
{
    int length;

    printf( "enter how many: " );
    scanf( "%i", &length );

    int arr[length];

    readArray( arr, length );

    return 0;
}

void readArray( int arr[], int length )
{
    int i, data;

    for ( i = 0; i < length; ++i )
    {
        printf( "enter data %i: ", i );
        scanf( "%i", &data );
        arr[i] = data;
    }
}

答案 1 :(得分:1)

您的readArray函数声明如下所示:

int readArray(int arr[50], int length)

也就是说,它需要整数数组(arr)和整数(length

您的代码主要是:

int length, arr, size;
//...
readArray(arr, length);

arr声明为int。

要解决此问题,您需要将arr声明为大小为length的数组:

printf( "enter how many: " );
scanf( "%i", &length );

int arr[length];  //declares an array 'arr' of size 'length'

请注意,您也无需在readArray声明中声明数组的大小 C 中的数组作为指向第一个元素的指针传递。因此,声明应该是:

int readArray(int arr[], int length)

相当于:

int readArray(int *arr, int length)

最后,您是在main中正确完成的,但在readArray函数中,请记住scanf函数调用中的&

scanf( "%i", &data );