Big prob gcc

Résolu
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007 - 14 sept. 2005 à 19:16
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007 - 15 sept. 2005 à 10:56
Bonsoir (ou bonjour),



J'ai un gros problème avec Dev-cpp, quand je fais le code suivant:



#include <stdio.h>

#include <stdlib.h>



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

{

for(int i=0;iArg 0: D:\Documents and Settings\Alcantor\Bureau\arg.exe

Arg 1: C:\data

Arg 2: C:\data\text.txt

Arg 3: D:\data

Appuyez sur une touche pour continuer...



Jusqu'ici toujours pas de problème.



Mais quand je tape:



arg.exe "C:\data" "C:\data\text.txt" "D:\data"



J'obtient ceci:



Arg 0: D:\Documents and Settings\Alcantor\Bureau\arg.exe

Arg 1: C:\data" C:\data\text.txt D:\data

Appuyez sur une touche pour continuer...



et je voudrais avoir:



Arg 0: D:\Documents and Settings\Alcantor\Bureau\arg.exe

Arg 1: C:\data\

Arg 2: C:\data\text.txt

Arg 3: D:\data

Appuyez sur une touche pour continuer...



Si qqun pouvait m'aider à trouver une solution, parce que si un utilisateur met "C:\data" je voudrai que ça fonctionne. Merci d'avance (et merci d'avoir lu jusqu'au bout ).

7 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
14 sept. 2005 à 19:31
salut,

le \ est compris comme un caractere d'échappement, du coup " ne doit
pas etre considéré comme un \ suivi de la fin de la chaine, mais
uniquement comme le caractere "

mets le en double, sans doute t'auras plus ce prob. : arg.exe "C:\data\" "C:\data\text.txt" "D:\data"



a+
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 sept. 2005 à 21:49
Regarde CommandLineToArgvW dans MSDN, moi je préfère parser mes arguments avec 2 pointeurs, mais bon...

ciao...
BruNews, MVP VC++
3
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
14 sept. 2005 à 20:06
Merci cosmobob, maintenant j'comprend pourquoi mais il doit bien avoir
un moyen de contourner ou de résoudre le problème, parce que quand je
tape copy "c:\data" "C:\data2" dans le cmd ça fonctionne bel et bien.



Alors j'ai peut-être une idée au lieu d'utiliser int main(int argc, char *argv[]) utiliser

int WINAPI WinMain (HINSTANCE hThisInstance,


HINSTANCE hPrevInstance,


LPSTR lpszArgument,


int nFunsterStil)




J'ai fais ce code:



#include <windows.h>

#include <stdio.h>



int WINAPI WinMain (HINSTANCE hThisInstance,


HINSTANCE hPrevInstance,


LPSTR lpszArgument,

int nFunsterStil)



{

printf("::%s::\n",lpszArgument);

system("pause");

return 0;

}



Quand je tape:



arg.exe "C:\data" "C:\data\text.txt" "D:\data"



J'obtient ceci:



::"C:\data" "C:\data\text.txt" "D:\data"::

Appuyez sur une touche pour continuer...



Pouvez-vous me dire s'il existe, une fonction qui permet analyser les arguments de lpszArgument pour les avoir dans un tableau comme dans char *argv[].
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 sept. 2005 à 20:19
quel rapport entre taper sur une console avec un listing qui passe dans un compilo C/C++ ???

ciao...
BruNews, MVP VC++
0

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

Posez votre question
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
14 sept. 2005 à 20:40
OUhhgh (j te comprend pas BruNews)



Ce que je veux savoir c'est si il existe une fonction qui permet de découper "C:\data" "C:\data\text.txt" "D:\data" en "C:\data","C:\data\text.txt" et "D:\data".



Ou bien si il faut que je la fasse moi.
0
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
15 sept. 2005 à 09:01
Merci beaucoup je crois que vais me débrouiller avec ça.
0
Alcantornet Messages postés 89 Date d'inscription mardi 8 février 2005 Statut Membre Dernière intervention 14 novembre 2007
15 sept. 2005 à 10:56
Voilà un code qui marche pour ceux que ça intéresse:



#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#include <shellapi.h>



char** GetArgv(int &nArgs){

char ** argv;

char * out;

out = GetCommandLine();



argv = ( char **)malloc(1);

nArgs =0;

int arglen= 0;

bool gui =0;

for(int i= 0;i<strlen(out);++i){

if (out[i] == '"') gui=!gui;

if (out[i] == ' ' && !gui){

if (out[i-1]! =' '){

++nArgs;

//printf("\n%i: ",nArgs);

argv = (char **)realloc(argv,nArgs+2);

argv[nArgs] = ( char *)malloc(1);

arglen =0;

}

}else{

//printf("%c",out[i]);

argv[nArgs] = ( char *)realloc(argv[nArgs],arglen+16);

argv[nArgs][arglen] =out[i];

argv[nArgs][arglen+1]= 0;

++arglen;

}

}

return argv;

}



int main(){



char ** argv;

int narg;

argv = GetArgv(narg);

for(int i=0; i<=narg; i++) printf("%i: %s\n", i, argv[i]);



system("pause");

}



avec ce code j'obtient ceci:



0: "D:\Documents and Settings\folly.KOBRA\Bureau\test.exe"

1: "C:\data"

2: "C:\data\text.txt"

3: "D:\data"

Appuyez sur une touche pour continuer...
0
Rejoignez-nous