【问题标题】:Segmentation fault when using array [duplicate]使用数组时出现分段错误[重复]
【发布时间】:2017-11-14 04:07:57
【问题描述】:
#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 个股票详细信息,例如名称、代码和价格,然后要求用户输入最高价格并打印出成本低于价格的股票。代码看起来不错,但是当我尝试运行时,它给出了“分段错误”错误行。

【问题讨论】:

标签: c struct segmentation-fault


【解决方案1】:

您没有为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;

【讨论】:

    【解决方案2】:
    scanf("%s",a[i].name);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      相关资源
      最近更新 更多