Probleme arguments

romainbisson Messages postés 89 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014 - 2 avril 2008 à 17:06
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 - 2 avril 2008 à 18:10
Bonjour, je souhaite que mon programme prenne en argument la premier valeur,

int main(int argc, char* argv){
    char nf
    nf = argv[0];

    FILE * f;
   
    f = fopen(nf,"r");
    if (f) break;
    printf("\n *** ERREUR A L'OUVERTURE DU FICHIER ***\n");
    }
    system("CLS");

mais sa ne marche pas

pour lancer mon programme, je souhaite faire C:\\ main.exe test.txt

et le programme prend en argument le test.txt et ouvre ce fichier

merci de m'aider

8 réponses

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
2 avril 2008 à 17:12
Bonjour,

argv[0] est le nom du programme lui-même !
Le premier paramètre passé est en argv[1].

Jean-François
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 avril 2008 à 17:23
Pas étonnant que ca ne fonctionne pas. Si ton code est réellement ce que tu as posté plus haut, il n'y a aucune chance que ça compile.

int main (int argc, char *argv) // argv est un pointeur de pointeurs (char **).

char nf;
nf = argv[0]; // argv[0] (ou 1 ici)  est par conséquence un pointeur et non un caractère.

if(f) break; // ??? break de quoi et en plus, fopen retourne 0 quand il y a une erreur.

system("cls"); // il est en dehors du main !!!!

C++ (@++)<!--
0
romainbisson Messages postés 89 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
2 avril 2008 à 17:33
je souhaite juste recuperer le nom du fichier dans la variable nf

char nf[MAX_PATH];

je lance mon programme :

main.exe test.txt      , test est un argument

ici, le fichier s'appelle test.txt et je veux que nf soit egale a test.txt

pour pouvoir faire

FILE *f;
f = fopen(nf,"r");

et si je fais :

int main(int argc, char* argv)
char nf[MAX_PATH];
nf = argv[1];

il me dit que : incompatible types in assignment of `char' to `char[260]'

et en faisant

char nf;

f = fopen(nf,"r"); --> il y a une erreur ici

l'erreur is :  invalid conversion from `char' to `const char*'

Merci de m'aider
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 avril 2008 à 17:35
NON

nf doit est un POINTEUR PAS UN TABLEAU

Ensuite, argv est un POINTEUR DE POINTEURS (char **)

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 avril 2008 à 17:37
"nf doit est un POINTEUR PAS UN TABLEAU"

nf doit être un POINTEUR PAS UN TABLEAU

Oups

C++ (@++)<!--
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
2 avril 2008 à 17:43
f = fopen(argv[1],"r"); directement ! (après avoir testé son existance bien sûr)

Jean-François
0
romainbisson Messages postés 89 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014
2 avril 2008 à 18:02
ok, merci c'est sympa
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
2 avril 2008 à 18:10
Et si il y a un quelconque traitement à faire sur ce nom de fichier avant d'ouvrir le fichier, il faut passer par une chaîne de caractères :

char nom_fichier[MAX_PATH];
strcpy(nom_fichier,argv[1]); // si argc > 1

... modif de nom_fichier, ex: strcat(nom_fichier,".txt");
f = fopen(nom_fichier,"r");
...



Jean-François
0