我试图读取文件内容并将它们存储到结构中,出于某种原因,我一直在收到段错误。请帮助我,我也不太了解valgrind。C编程中的结构
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int day;
int month;
int year;
char text[401];
} journal;
int main(int argc, char** argv){
int i, numberEntries;
FILE* fp = fopen(argv[1], "r");
fscanf(fp,"%d", &numberEntries); /* reads value on first line of file for number of entries */
printf("%d", numberEntries); /* check that it worked */
journal *entryArray ;
entryArray = (journal*)malloc(sizeof(journal));
if(fp == NULL){
perror("Error opening file");
} else {
for(i=0; i<4; i++){
fscanf(fp,"%d/%d/%d", entryArray[i].day, entryArray[i].month, entryArray[i].year);
fgets(entryArray[i].text, 400, fp);
printf("%s", entryArray[i].text);
}
}
for(i=0; i<4; i++){
printf("%d %d %d", entryArray[i].day, entryArray[i].month, entryArray[i].year);
printf("%s", entryArray[i].text);
}
free(entryArray);
return 0;
}
更新后的代码仍然给出了段错误。
typedef struct {
int day;
int month;
int year;
char text[401];
} journal;
int main(int argc, char** argv){
int i, numberEntries;
FILE* fp = fopen(argv[1], "r");
if(fp == NULL){
perror("Error opening file");
} else {
fscanf(fp,"%d", &numberEntries); /* reads value on first line of file for number of entries */
printf("%d", numberEntries); /* check that it worked */
journal *entryArray ;
entryArray = (journal*)malloc(numberEntries*sizeof(journal));
for(i=0; i<4; i++){
fscanf(fp,"%d/%d/%d", &entryArray[i].day, &entryArray[i].month, &entryArray[i].year);
fgets(entryArray[i].text, 400, fp);
printf("%s", entryArray[i].text);
}
for(i=0; i<4; i++){
printf("%d/%d/%d", entryArray[i].day, entryArray[i].month, entryArray[i].year);
printf("%s", entryArray[i].text);
}
free(entryArray);
}
return 0;
}
输入文件
4
12/04/2010
Interview went well I think, though was told to wear shoes.
18/04/2010
Doc advised me to concentrate on something... I forget.
03/05/2010
Was asked today if I was an art exhibit.
19/05/2010
Apparently mudcakes not made of mud, or angry wasps.
使用gdb来在你的代码段错误得到抵消。根据情况,segfault可能在任何地方出现。所以这样很难帮助你。 – 2014-10-09 04:06:54