使用数组时出现分段错误

时间:2017-11-14 04:07:57

标签: c struct segmentation-fault

#include <stdio.h>

typedef struct StockDetail {
    char* name;
    int code;
    int price;

} Stock;

int main(void)
{
    Stock a[200]; int i; int b;
    for(i=0; i<20 ; i++ )
    {
        printf("Stock %i\n",i+1);
        printf("Name:");
        scanf("%s",a[i].name);
        printf("Code:");
        scanf("%i",&a[i].code);
        printf("Name:");
        scanf("%i",&a[i].price);

    }

    printf("Maximum price of the stock:");
    scanf("%i", &b);

    for(i=0; i<20 ; i++)
    {
        if(a[i].price<=b)
        {
            printf("%s\n",a[i].name);
        }
    }
}

您好,我正在尝试实施一个程序,该程序会读取名称,代码和价格等20个库存明细,然后要求用户输入最高价格并打印成本低于价格的库存。代码看起来很好,但是当我试图运行它时,给出了#34;分段错误&#34;错误行。

2 个答案:

答案 0 :(得分:7)

您没有为Stock.name分配任何空间。使用char[100]或分配一些空间。

类似的东西:

for(i=0; i<20 ; i++ )
{
    char tempname[100];
    printf("Stock %i\n",i+1);
    printf("Name:");
    scanf("%s",tempname);
    a[i].name=strdup(tempname);

别忘了释放它!

否则声明

typedef struct StockDetail {
char name[100];
int code;
int price;

} Stock;

答案 1 :(得分:4)

scanf("%s",a[i].name);

这里你输入的名称只有char*它没有分配内存,你可以将它声明为具有足够大小的char数组,或者在输入之前用malloc分配内存