我的C应用程序中的分段错误

时间:2013-09-20 09:11:20

标签: c struct segmentation-fault fgets scanf

我刚接触fgets,所以我不知道自己做错了什么。我需要制作一个浮动表,但是在标准输入期间我保持了seg错误。为了便于阅读,我拿出了所有“不必要”的代码,所以我确实使用了参数中的所有参数。即使我输入一个数字,它也会出现故障。

typedef struct row
{
    int column;
    float value[20];
}ROW;

//in main ROW table[100];

void makeTable2(ROW* table, int* row, int* column)
{
    int counter = 0, counter2;
    int y = 0;

    char str[256], again;

    printf("Enter in the table: ");

    do{

        fgets(str, 256, stdin);

        while(sscanf(str, "%f", &table[*row].value[y]))
            y++;

        (*row)++;

        printf("Add another row? (y or n)? ");
        scanf("%c", &again);

    }while(again == 'y' || again == 'Y');
}

2 个答案:

答案 0 :(得分:1)

在行

   while(sscanf(str, "%f", &table[*row].value[y]))

你每次都在读取你的第一个数字,不是NEXT,只是第一个,当y超过20时,你会得到缓冲区溢出。 分别尝试scanf()每个值。

答案 1 :(得分:0)

while(sscanf(str, "%f", &table[*row].value[y]))
     y++;

这是一个无限循环。你总是从str缓冲区中存在的第一个浮点值读取,最终y变得超过19,并且存在分段错误。