粉碎堆栈检测程序终止于c

时间:2016-10-16 12:42:03

标签: c linux

我收到此错误*****粉碎堆栈检测到******程序终止。我没有使用任何缓冲区。只需记录读取记录。请帮助我。 这是我的代码:

#include <stdio.h>

struct art
{
    char name[30];
    float velocity;
    float min_angle;
    float max_angle;
};
create(char *,float,float,float); */
int main()
{

    // printf("I am starting"); 

    FILE *infile;
    struct art input;

    /*** open the accounts file ***/
    infile = fopen ("artillery.txt","r");
    if (infile == NULL)
    {
         fprintf(stderr, "\nError opening artillery.txt\n\n");
         // exit (1);
    }

    while (fread (&input, sizeof(struct art), 6, infile))
    { 
        printf("%s", input.name);
        printf("%f", input.velocity);
        printf("%f", input.min_angle);
        printf("%f", input.max_angle);              
    }
    return 0;
}

文件记录是:

canon 1700 30 45
bazooka 80 30 45
tank 2000 33 50
ak-47 715 0 90
pistol9mm 380 0 90
revolver 400 0 90

3 个答案:

答案 0 :(得分:0)

您正在阅读文本数据,就好像它是二进制文件一样。您无法使用类似的结构读取文件中的文本。

答案 1 :(得分:0)

您应该使用fgets逐行读取文件。然后将每一行转换为结构。您可以使用strtok打破空格并使用atof将数字转换为浮点数。

答案 2 :(得分:-1)

有了这个

fread (&input, sizeof(struct art), 6, infile)

您正在尝试将6条记录读入变量,该变量是单个结构。要读取6条记录,您需要一个包含6个结构的数组

struct art input[6];

但是你无论如何都是从文本文件中读取的,因此你无法直接阅读结构。