2016-09-06 2 views
-2

Ich bin mit einem Problem konfrontiert, ich schreibe diesen Code in Windows, die jede Zeile der Datei liest. und es funktioniert gut in Windows 7, aber nicht in liunx. Ich kann es wirklich nicht herausfinden. kann mir jemand helfen?Warum funktioniert dieser Code gut in Windows, aber nicht in 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; 
} 

i und meine Mitschüler sie herausfinden, dass die „fgets“ in diesem Code falsch ist, aber ich weiß nicht, es in den Fenstern gut funktioniert.

+0

Das ist eindeutig nicht C! – Olaf

Antwort

1

In Ihrem Code ist buffer links vereinheitlicht. Also, es kann sehr gut (und am wahrscheinlichsten) auf einige ungültige Speicherort zeigen. Zugriff auf ungültigen Speicher ruft undefined behavior auf. Sobald Ihr Programm UB erreicht, ist absolut nichts ist garantiert.

Sie müssen buffer auf einen gültigen Speicherort zeigen, bevor Sie diesen in fgets() verwenden können.

Verwandte Themen