2016-06-14 33 views
-1

Ich bin neu in C und versuche herauszufinden, warum ich im folgenden Code einen Segmentierungsfehler erhalte. Alles, was ich hier versuche, ist, zu überprüfen, ob mein erstes Argument eine .txt enthält, und das Programm wird drucken, ob ich es tue oder nicht.Warum bekomme ich den Segmentierungsfehler 11? [C]

Wenn ich diesen Code ausführen, bekomme ich einen Segmentierungsfehler 11. Ich bin mir nicht sicher, was das bedeutet. Kann mir jemand helfen?

+3

'char filename = argv [1];' -> 'char * filename = argv [1];' – kaylum

+3

Sie sollte mit Warnungen auf kompilieren. z.B. Wenn Sie 'gcc' verwenden, verwenden Sie' gcc -Wall source.c'. (Ich würde wahrscheinlich auch '-Werror' hinzufügen.) Es werden Warnungen mit' char' angezeigt, die 'char *' zugewiesen sind und umgekehrt. – anishsane

+0

Übergeben Sie Befehlszeilenargumente. Und ich denke, dass Sie Speicher für txtvalid –

Antwort

1

Sie müssen argc testen, bevor argv

Versuchen Zugriff:

#include <stdio.h> 

int main(int argc, char *argv[]) { 

    // Check for argument 
    if (argc <= 1) 
    { 
     printf("Missing argument\n"); 
     return 0; 
    } 

    char *filename = argv[1];  // Notice this change, i.e. *filename 
    char *txt_filename = filename; 
    char *check_txt = ".txt"; 

    char *txtvalid = strstr(txt_filename, check_txt); 

    if (txtvalid) { 

     printf("You have entered a correct text file!"); 

    } 
    else { 

     printf("You have entered an incorrect text file!"); 
    } 


} 
+0

krank geben Sie einen Versuch – Mr10k

+0

Ich kann bestätigen, dass dies für mich gearbeitet hat, ja, ich habe nicht erkannt, dass ich Dateiname als Zeiger zuweisen musste. Danke für die Hilfe! – Mr10k

Verwandte Themen