A voir également:
- Ouvrir un fichier en lecture avec argv ?
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- Fichier rar - Guide
- Ouvrir un fichier .dat - Guide
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
22 août 2013 à 21:00
22 août 2013 à 21:00
Bonjour,
Déjà, il faut commencer par lire les messages du compilateur.
ex10.c: In function 'main':
ex10.c:28: error: parse error before ';' token
Que se passe-t-il ligne 28 avant le ; ?
printf("Solde: %d",solde(argv[1]); => Oubli d'une parenthèse.
D'ailleurs, la prochaine fois, si tu pouvais nous dire où se trouvent les lignes, ça nous éviterait de compter :-).
Autre erreur ligne 54 :
client = fopen(argv[1], "r"); // ouvrir en lecture
argv[1] est un caractère (argv est de type char* dans ta fonction).
D'où l'erreur. Essaie plutôt : fopen(argv, "r");
printf("Impossible d'ouvrir le fichier %s\n", argv[1]);
Même erreur.
j'aimerai que si je tape pierre.txt le compte pierre.txt soit afficher (d'autre option à venir)
même si possible (aucune idée comment faire) que si je tape "pierre" le compte pierre.txt soit débiter
Tu peux tester la présence d'un '.' dans le nom du fichier (strchr). S'il n'y est pas, tu rajoutes l'extension ".txt" à la fin (strcat/strncat).
Pour l'utilisation de plusieurs options, la bibliothèque argtable devrait t'intéresser.
Cdlt,
Déjà, il faut commencer par lire les messages du compilateur.
ex10.c: In function 'main':
ex10.c:28: error: parse error before ';' token
Que se passe-t-il ligne 28 avant le ; ?
printf("Solde: %d",solde(argv[1]); => Oubli d'une parenthèse.
D'ailleurs, la prochaine fois, si tu pouvais nous dire où se trouvent les lignes, ça nous éviterait de compter :-).
Autre erreur ligne 54 :
client = fopen(argv[1], "r"); // ouvrir en lecture
argv[1] est un caractère (argv est de type char* dans ta fonction).
D'où l'erreur. Essaie plutôt : fopen(argv, "r");
printf("Impossible d'ouvrir le fichier %s\n", argv[1]);
Même erreur.
j'aimerai que si je tape pierre.txt le compte pierre.txt soit afficher (d'autre option à venir)
même si possible (aucune idée comment faire) que si je tape "pierre" le compte pierre.txt soit débiter
Tu peux tester la présence d'un '.' dans le nom du fichier (strchr). S'il n'y est pas, tu rajoutes l'extension ".txt" à la fin (strcat/strncat).
Pour l'utilisation de plusieurs options, la bibliothèque argtable devrait t'intéresser.
Cdlt,
Merci fiddy. J'essaye d'écrire un truc mais les 2 idée qui me sont apparu sont bloquer j'ai en premier temps essayer de mettre argv dans une chaine de char mais rien à faire je trouve pas.
ensuite par cette manière là:
J'aurais pu faire comme ce bout de code que j'ai trouver:
Toujours sans succès alors j'ai voulu tester cela..:
bon la j'avoue sécher.
edit: pour mon dernier choix j'ai trouver.
pour mes autres je trouve intéressant de comprendre pourquoi je ne compile pas. Et ce que je pourrais faire pour y remédier
char fichier[22] = (char)argv[1]; printf("%s",fichier);
ensuite par cette manière là:
char fichier[22]; strcpy(nom, argv[1]); printf("%s",fichier);
J'aurais pu faire comme ce bout de code que j'ai trouver:
char image[22] = "dossier/"; char couleur[2] = "a"; char valeur[3] = "bc"; strcat(strcat(strcat(image, couleur), valeur), ".png"); printf("%s", image);
Toujours sans succès alors j'ai voulu tester cela..:
FILE * client; client = fopen((argv,".txt"), "r"); // ouvrir en lecture
bon la j'avoue sécher.
edit: pour mon dernier choix j'ai trouver.
client = fopen(strcat(argv,".txt"), "r");
pour mes autres je trouve intéressant de comprendre pourquoi je ne compile pas. Et ce que je pourrais faire pour y remédier
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
23 août 2013 à 09:34
23 août 2013 à 09:34
Tu as pris mes remarques en compte ? Tes problèmes sont-ils résolus ?
char fichier[22] = (char)argv[1];
printf("%s",fichier);
Ou as-tu tapé ces lignes ? Dans le main ou dans solde ? Pourquoi castes-tu en char ? Il faut utiliser strcpy/strncpy.
char fichier[22];
strcpy(nom, argv[1]);
printf("%s",fichier);
Même question, c'est tapé dans le main ou dans solde ? Car dans solde argv[1] représente 1 caractère et non une chaîne. De plus tu copies dans nom et pas dans fichier...
Et merci de donner systématiquement les erreurs du compilateur, ça aide énormément comme dit dans le premier post.
char fichier[22] = (char)argv[1];
printf("%s",fichier);
Ou as-tu tapé ces lignes ? Dans le main ou dans solde ? Pourquoi castes-tu en char ? Il faut utiliser strcpy/strncpy.
char fichier[22];
strcpy(nom, argv[1]);
printf("%s",fichier);
Même question, c'est tapé dans le main ou dans solde ? Car dans solde argv[1] représente 1 caractère et non une chaîne. De plus tu copies dans nom et pas dans fichier...
Et merci de donner systématiquement les erreurs du compilateur, ça aide énormément comme dit dans le premier post.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
23 août 2013 à 12:39
23 août 2013 à 12:39
Il faut bien faire attention aux types, pointeur, pointeur de pointeur, tableau et types primitifs.
"char* argv[]" est un tableau de taille inconnu contenant des objets de type pointeur vers char. un pointeur de char est souvent une chaine de caractère.
Partant de là, si tu veux utiliser un nom pour un paramètre particulier de ta chaine de caractère, tu peux faire :
char * fichier=argv[1];
mais attention, il s'agit d'un "alias" c'est à dire que si tu modifie la chaine pointé par fichier, tu modifie la chaine de argv[1]. Si tu veux une chaine à part, il faut utiliser le strcpy mais ne pas oublier de dimensionner correctement ta variable "fichier", sinon, tu risque de ne pas récupérer tous les caractères.
etc.
Pour debugueur toi même, il faut que tu comprennes les messages du compilo. Première étape, aller voir la ligne indiquer.
Bionne chance
"char* argv[]" est un tableau de taille inconnu contenant des objets de type pointeur vers char. un pointeur de char est souvent une chaine de caractère.
Partant de là, si tu veux utiliser un nom pour un paramètre particulier de ta chaine de caractère, tu peux faire :
char * fichier=argv[1];
mais attention, il s'agit d'un "alias" c'est à dire que si tu modifie la chaine pointé par fichier, tu modifie la chaine de argv[1]. Si tu veux une chaine à part, il faut utiliser le strcpy mais ne pas oublier de dimensionner correctement ta variable "fichier", sinon, tu risque de ne pas récupérer tous les caractères.
etc.
Pour debugueur toi même, il faut que tu comprennes les messages du compilo. Première étape, aller voir la ligne indiquer.
Bionne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci à vous, j'ai résolu le problème. Je tente de gratter sur certain point de c. Je fait en fait un exo d'entrainement pour mon exam d'os de Lundi. Et vu que il demandera peut être quelque chose avec argv je préfère maitriser le sujet. 2eme étape de l'exercice un fichier log gerer par un second fils qui fonctionne en alternance avec une sémaphore. Je crois que après cela je serais prêt :3