我正在尝试编写一个从文件中读取数据并将其放入结构数组中的程序。我已经成功地将它放入数组中,但随后我得到了一个分段错误。我相信我必须使用malloc来初始化结构数组,但我是编程新手,并不真正了解如何做到这一点。谢谢你的帮忙!我已经复制了我的代码片段,这样你就可以看到我做了什么。我没有在这段代码中包含我的函数。
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);
}
}发布于 2016-11-30 08:40:09
发布于 2016-11-30 08:54:41
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的链接
发布于 2016-11-30 13:33:15
代码中存在多个问题:
openFile未初始化,为其调用fgets()将调用未定义的行为。你想为fopen()打开一个文件或者将openFile的值设置为标准输入流stdin.char数组应该以另一种顺序定义:char bufferROWS;
ROWS可能被定义为小于fgets().
COLS,传递给char应该测试fgets()的返回值:它在文件末尾返回NULL,并且目标数组的内容在此char中是不确定的,或者不初始化loc1取决于parseLine()函数的作用。parseLine()不对目标结构的内容做任何假设是有意义的,但源代码尚未发布,因此我们无法确定。
double的printf格式说明符为%f,额外的l将被忽略。https://stackoverflow.com/questions/40878147
复制相似问题