首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件读入结构数组后出现分段错误

将文件读入结构数组后出现分段错误
EN

Stack Overflow用户
提问于 2016-11-30 08:16:42
回答 3查看 275关注 0票数 1

我正在尝试编写一个从文件中读取数据并将其放入结构数组中的程序。我已经成功地将它放入数组中,但随后我得到了一个分段错误。我相信我必须使用malloc来初始化结构数组,但我是编程新手,并不真正了解如何做到这一点。谢谢你的帮忙!我已经复制了我的代码片段,这样你就可以看到我做了什么。我没有在这段代码中包含我的函数。

代码语言:javascript
复制
struct Weather
{
    char location;
    int daynum;
    double temp;
    double precip;
};

int main (void)
{
    FILE*openFile;
    char buffer[COLS][ROWS];
    int i = 0;
    struct Weather loc1; //initialize here?

    for (i = 0; i <200; i++)
    {
        fgets (buffer[i], ROWS, openFile);
        parseLine(buffer[i], &loc1);
        printf ("%d %c %d %.2lf %.2lf\n",i, loc1.location, loc1.daynum, loc1.temp, loc1.precip);

    }
}
EN

回答 3

Stack Overflow用户

发布于 2016-11-30 08:40:09

您的文件流(openFile)未初始化;它实际上并未指向文件。正如yano在他的comment中所说的,使用fopen()来正确地初始化文件指针。

票数 1
EN

Stack Overflow用户

发布于 2016-11-30 08:54:41

  1. 在执行任何I/O操作之前,您必须使用fopen()初始化文件流!

int main() { char filename64;FILE *fp;snprintf(filename,sizeof(filename),"hello1234.txt");if(NULL == (fp = fopen(filename,“r”){ printf("err,当fopen()时失败,%s%s%d.\n“,__FILE__,__FUNCTION__,__LINE__);return -1;}//此处的代码返回0;}

  • 初始化结构

请注意,malloc()无法初始化该结构。

有两种方法:

M0:

结构天气loc1;成员集(&loc1,0,sizeof(结构天气));

M1:

malloc manual.天气loc1 = struct,或者单击struct天气for的链接

票数 1
EN

Stack Overflow用户

发布于 2016-11-30 13:33:15

代码中存在多个问题:

  • 流指针openFile未初始化,为其调用fgets()将调用未定义的行为。你想为fopen()打开一个文件或者将openFile的值设置为标准输入流stdin.
  • The 2D char数组应该以另一种顺序定义:

char bufferROWS;

  • you应该为循环计数器和二维数组定义使用相同的常量:ROWS可能被定义为小于fgets().

  • you的值,行缓冲区的大小是COLS,传递给char应该测试fgets()的返回值:它在文件末尾返回NULL,并且目标数组的内容在此char中是不确定的,或者不初始化loc1取决于parseLine()函数的作用。parseLine()不对目标结构的内容做任何假设是有意义的,但源代码尚未发布,因此我们无法确定。

  • 类型doubleprintf格式说明符为%f,额外的l将被忽略。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40878147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档