2016-06-14 3 views
-1

Je suis nouveau en C et j'essaie de comprendre pourquoi je reçois une erreur de segmentation dans le code suivant. Tout ce que j'essaie de faire ici est de vérifier que mon premier argument contient un fichier .txt, et le programme affichera si oui ou non je le fais. Lorsque j'exécute ce code, j'obtiens un défaut de segmentation 11. Je ne suis pas sûr de ce que cela signifie. Quelqu'un peut m'aider?Pourquoi ai-je une erreur de segmentation 11? [C]

+3

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

+3

devrait compiler avec des avertissements. par exemple. Si vous utilisez 'gcc', utilisez' gcc -Wall source.c'. (J'ajouterais probablement '-Werror' probablement) Il affichera des avertissements avec' char' assigné à 'char *' et vice versa. – anishsane

+0

Passez-vous des arguments de ligne de commande. Et je pense que vous devez allouer de la mémoire pour txtvalid –

Répondre

1

Vous devez tester argc avant d'accéder à argv

Essayez:

#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

mal donner cela un essai – Mr10k

+0

je peux confirmer cela a fonctionné pour moi, ouais je ne savais pas que je devais attribuer un nom de fichier comme un pointeur. Merci pour l'aide! – Mr10k