2016-09-06 36 views
-2

我面臨一個問題,我寫這個代碼讀取文件的每一行的窗口。它在Windows 7中運行良好,但不在liunx中運行。我真的無法弄清楚。任何人都可以幫助我?爲什麼這段代碼在windows中運行良好,但在linux中卻不行?

list< list<string> > getTransRecordsFormFile(const char* fileName) 
{ 
    list< list<string> > res; 
    FILE* f = fopen(fileName,"r"); 
    if(f == NULL) { 
     cout << "load input file failed!" << endl; 
     exit(0); 
    } 
    else { 
     char *buffer; 
     while(fgets(buffer,MAX_LENTH,f) != NULL) { 
      list<string> v = splitStr(buffer, SPLITCHAR); 
      res.push_back(v); 
     } 
    } 
    fclose(f); 
    return res; 
} 

我和我的同學們發現它的「與fgets」這個代碼是錯誤的,但我不知道它的工作原理以及在Windows中。

+0

這顯然不是C! – Olaf

回答

1

在你的代碼,buffer剩下未初始化。因此,它很可能(和最有可能)指出了一些無效內存位置。訪問無效內存調用undefined behavior。一旦你的程序擊中UB,絕對是沒有什麼有保證。

你需要作出buffer指向一些有效的內存位置,然後才能使用,在fgets()

相關問題