繁体   English   中英

粉碎堆栈检测到程序在 c 中终止

[英]smashing stack detected program terminated in c

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

#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

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

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

有了这个

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

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

struct art input[6];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM