Ich habe den folgenden Code:Lesedatei in eine Struktur stoppt manchmal ohne Grund
int main() {
FILE *fp = fopen("inventory.txt", "r");
if (fp == NULL) {
printf("File Error");
return 1;
}
while (1) {
char *componentType = malloc(200);
char *stockCode = malloc(20);
int numberOfItems = 0;
int price = 0;
char *additionalInformation = malloc(20);
int fileRead = fscanf(fp, "%[^,], %[^,], %i, %i, %[^,\r\n]", componentType, stockCode, &numberOfItems, &price,
additionalInformation);
if (fileRead == EOF) {
printf("End of file!\n");
break;
}
printf("%s Read Record!\n", stockCode);
free(componentType);
free(stockCode);
free(additionalInformation);
}
printf("DONE!");
fclose(fp);
}
Die Datei sieht wie folgt aus:
resistor, RES_1R0, 41, 1, 1R0
resistor, RES_10R, 467, 1, 10R
resistor, RES_100R, 334, 1, 100R
resistor, RES_1K0, 500, 1, 1K0
resistor, RES_10K, 169, 1, 10K
resistor, RES_100K, 724, 1, 100K
resistor, RES_1M0, 478, 1, 1M0
diode, BY126, 118, 12
diode, BY127, 45, 12
transistor, AC125, 13, 35, PNP
transistor, AC126, 40, 37, PNP
....
Allerdings, wenn ich führen Sie den Code es manchmal wie abgeschlossen dies:
RES_1R0 Read Record!
RES_10R Read Record!
...
CF12 Read Record!
CF13 Read Record!
Done!
Aber manchmal hält es ohne Grund so:
RES_1R0 Read Record!
RES_10R Read Record!
...
D12 Read Record!
D13 Read
Jedes Mal, es gibt immer noch 0.
Was ist das Problem?
Leckt Ihr realer Code Speicher wie im Beispiel gezeigt? Oder dient es nur der Veranschaulichung? Und wie viele Zeilen enthält Ihre Eingabedatei - um herauszufinden, wie viel Speicher Sie tatsächlich zuweisen. Überprüfen Sie als Erstes alle Rückgabewerte von "malloc", um zu überprüfen, ob eine Zuordnung fehlschlägt. – kaylum
Ja, es leckt wie im obigen Beispiel. Allerdings habe ich "..." verwendet, da ich natürlich nicht alle zeigen konnte. Es gibt 299 Datensätze! –
probiere '% [^, \ r \ n]' -> '% [^, \ r \ n]% * c' – BLUEPIXY