簡體   English   中英

在循環中使用fscanf()的問題

[英]Issue with using fscanf() in a loop

希望這不是以前有人問過的問題,我已經瀏覽過以前提出的問題,但是似乎沒有一個問題適用於我的問題。

我正在研究從文件中讀取文本行的程序時遇到一些問題。 我嘗試讀取的文件格式為:

10
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number
first_name     last_name     long_int_number

(您會注意到10也代表列表中的項目數。)

我寫的代碼是:

struct student
{
  long studentNumber;
  char *firstName;
  char *lastName;
};

struct student *readFile(char *fileName, int *numOfStudents)
{
    struct student readStudents[10];
    FILE *fp;
    int i;
    char *buff;

fp=fopen(fileName,"r");
fscanf(fp,"%d",numOfStudents);
for (i=0;i<*numOfStudents;i++)
{
    fscanf(fp,"%s",readStudents[i].firstName);
    //printf("%s\n",readStudents[i].firstName);
    fscanf(fp,"%s ",readStudents[i].lastName);
    //printf("%s\n",readStudents[i].lastName);
    fscanf(fp,"%ld",&readStudents[i].studentNumber);
    //printf("%ld\n",readStudents[i].studentNumber);
}
fclose(fp);

/*the remaining code*/

}

我已經注釋掉了我用來查看錯誤發生位置的printf語句。 基本上,它正確讀取numOfStudents,然后正確執行第一個循環,但是此后程序崩潰。 我不確定為什么會這樣。 最初,我認為這是因為在閱讀新行時遇到問題,但這可能不是問題,因為在10和第一組學生信息之間存在新行。 我是編程新手,您所提供的任何幫助都將非常有幫助!

謝謝。 :)

我已經瀏覽了先前提出的問題,但是似乎沒有一個問題完全適用於我的問題。

這實際上是幾十個相同問題的重復。 您尚未為指針readStudents[i].firstName分配內存,因此它們未初始化,訪問它們所指向的內存將導致未定義的行為,表現為崩潰。 您將需要使用數組作為結構成員,或者需要malloc()動態地吃內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM