ich Debian bin mit und habe ein seeeehr einfachen Datei-Parsing-Programm in C geschrieben Die Datei, die ich über 32k Zeilen lang öffnen will, ist, mit einem strengen Format:Dateideskriptor verschwindender/zunichte gemacht
number,number\n
number,number\n
and so on ...
Mein Code :
int main(int argc, char* argv[])
{
char data = 0;
int addr = 0;
char buf[50] = {0};
FILE* myfile = fopen("eelocdump.txt", "r");
if(myfile == NULL)
{
printf("File open error\n");
return 1;
}
while (fgets(buf, 50, myfile) != NULL)
{
sscanf(buf, "%5d,%3d\n", &addr, &data);
printf("%d,%d\n", addr, data);
}
fclose(myfile);
return 0;
}
Für einige ungerade Gründen, die ich nicht verstehe, liest mein Code, um die erste Zeile der Datei, schreibt es aus, dann segfaults. Nach ungefähr einer Stunde, die ich damit verbracht habe, habe ich herausgefunden, dass der Aufruf von sscanf den Dateideskriptor auf NULL gesetzt hat.
Ich habe ein „fix“ gefunden, dass ich kaum zu nennen wagen so:
while (fgets(buf, 50, myfile) != NULL)
{
sscanf(buf, "%5d,%3d\n", &addr, &data);
printf("%d,%d\n", addr, data);
myfile = myfile;
}
diese offensichtliche Erklärung Hinzufügen von meinen Code Arbeit macht, alle 32k Linien auszuschreiben. Dies ist alles andere als befriedigend, da dies nichts ändern sollte. (noch sollte sscanf den Dateideskriptor beeinflussen)
Könnten Sie mir bitte helfen, dieses Problem richtig zu lösen? Ich mag die Idee nicht, es "magic" zu nennen.
Vielen Dank im Voraus,
'char Daten = 0;' -> 'int Daten = 0;' weil '% 3d' für int. – BLUEPIXY
Ich habe mit gcc getestet und es funktioniert gut ('gcc (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) 4.8.4') – BlackBear
kompilieren Sie es mit' -Wall' '-Wextra' gcc sollte vor falscher Verwendung von' scanf warnen 'und' printf' – fghj