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]
-1
A
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!");
}
}
'char filename = argv [1]; '->' char * filename = argv [1], vous ' – kaylum
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
Passez-vous des arguments de ligne de commande. Et je pense que vous devez allouer de la mémoire pour txtvalid –