2016-06-20 1 views
-20

Ich habe ein einfaches Programm geschrieben, um den Inhalt einer Textdatei zu lesen, und ich kompilierte es mit cl.exe (Visual Studio Compiler). Das Programm kompiliert, und wenn ich es laufen, es beginnt in der Regel und in dem Moment geht es vorbei an der Lesen und Ausdrucken der Daten, die sie brutal abstürzt ... Hier ist der Code:Programm stürzt nach dem Lesen von Daten aus Datei mit fscanf

#include <iostream> 
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <fstream> 
#include <string> 


int main (int argc, char *argv[]) 
{ 
char filename[256]; 
char d1[9]; 
char d2[8]; 

if (argc > 1) //lecture de l'argument 
strcpy(filename, argv[1]); 
    else { 
     printf("Usage: read_file"); 
     return 0; 
    } 

FILE *f = fopen(filename, "r"); 
if (f == NULL) { 
    printf("Cannot find file \'%s\'\n", filename); 
    return 0; 
} 

printf("file opened\n"); 

rewind(f); 
fscanf(f, "%s %s", d1, d2); 

printf("%s %s",d1,d2); 
fclose(f); 

return 1; 
} 

Wenn ich es mit gcc kompilieren funktioniert aber gut. Die Sache ist, ich brauche dies mit Visual Studio Compiler zu laufen ...

+2

Was ist der Inhalt der Datei? Was denkst du passiert, wenn die Strings, die du liest, länger als *** *** und *** *** sind? (Beachten Sie, dass die von mir genannten Größen Platz für den String-Terminator in Ihren Arrays lassen) –

+20

Ein kleiner Tipp: ** Niemals den Compiler dafür verantwortlich machen. Ich habe in meinem Leben vielleicht 5 tatsächliche Compilerfehler gefunden, während meine eigenen Fehler überzählig sind. –

+0

Fehler ist in Ihrem Code, nicht Visual Studio. Ihre 'fscanf'-Aufrufe berücksichtigen keine Strings beliebiger Länge. Benutze nicht, was du nicht kontrollieren kannst. Entfernen Sie das Tag [tag: c] und den C-Code genauso gut. – IInspectable

Antwort

6

Zunächst einmal sollten Sie Ihre Eingabe Beispiel Beiträge geschrieben haben ..

Wie auch immer, wie andere Menschen haben festgestellt, d1 und d2 sind zu klein und speichern den C-Null-Terminator nicht. Einfach größer machen (d1 [10], d2 [9]).

Schließlich programmieren Sie in C++, also würde ich empfehlen, die C++ Bibliotheken zu verwenden. Ihr Code wäre einfacher und würde nicht c und C++ mischen.

Mit freundlichen Grüßen.

Verwandte Themen