ARGV,ARGC, ENVP--->>>> big prob

ARGV,ARGC, ENVP--->>>> big prob - C++ - Programmation

Marsh Posté le 08-09-2003 à 17:21:00    

Quelqu'un pourrait il m'aider,le sujet est simplemais j'y arrive pas :-).
 
En faite je creer un pgm où je lui fourni des parametre et en retour il doit me donner le numero ou ce trouve le parametre.
 
Exemple:      main 1 Path,j'aimerai qu'il me retourne la ligne(normalement c'est la 15 qui contient la variable d'environnement Path). Pour pouvoir executé le pgm, il faut utilisé command et tapé aller dans le repertoire du debug du pgm et tapé le nom du pgm suivi de 1 et du mot Path.
 
Pourriez vous me dire pourquoi quand je compare ARGV[2](C'est Path entrer en parametre), il ne le trouve pas dans ENVP.(contient toute les variable)Pour voir les variable taper" set "dans command.
 
 
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>  
 
int main(int argc ,char *argv[],char *envp[])
{
 
 if (strcmp(argv[1],"1" )==0)
 {
  for(int x=0;x<20;x++)
  {
   if (strcmp(envp[x],argv[2])==0)
   {
    cout << "trouve" << endl;
   }
   else
   {
    cout << "impossible de trouver la valeur de path" << endl;
   }
  }
 }
 else  
 {
  cout << "Numero correspond pas(1 ou 2 ou 3)" << endl;  
 }
return 0;
}

Reply

Marsh Posté le 08-09-2003 à 17:21:00   

Reply

Marsh Posté le 08-09-2003 à 17:23:05    

Code :
  1. for(int x=0;x<20;x++)
  2.   {
  3.    if (strcmp(envp[x],argv[2])==0)
  4.    {
  5.     cout << "trouve" << endl;
  6.    }
  7.    else
  8.    {
  9.     cout << "impossible de trouver la valeur de path" << endl;
  10.    }
  11.   }


 
ca c idiot ca, tu affiches un message d'erreur avant meme d'avoir essayé toutes les possibilités

Reply

Marsh Posté le 08-09-2003 à 17:26:50    

sa fonctione tjr pas.IL m'affiche 20 x  
 
 
"impossible de trouver la valeur de path" << endl;

Reply

Marsh Posté le 08-09-2003 à 17:39:10    

tu sais que strcmp fait attention a la casse ?

Reply

Marsh Posté le 08-09-2003 à 17:45:28    

Code :
  1. int main(int argc ,char *argv[],char *envp[])
  2. {
  3. if (argc < 2)
  4.  return -1;
  5. if (strncmp(argv[1], "1", 1) == 0) {
  6.  bool bFound = false;
  7.  int i = 0;
  8.  while (envp[i] != NULL) {
  9.   if (strncmp(envp[i], argv[2], strlen(argv[2])) ==0 ) {
  10.    cout << argv[2] << " = \"" << envp[i] << "\"" << endl;
  11.    bFound = true;
  12.   }
  13.   i++;
  14.  }
  15.  if (bFound == false) {
  16.   cout << "impossible de trouver la valeur de path" << endl;
  17.  }
  18. }
  19. else {
  20.  cout << "Numero correspond pas(1 ou 2 ou 3)" << endl; 
  21. }
  22. return 0;
  23. }


 
Avec un tolower ou upper ca serait bien aussi mais bon, et manque des cas d'erreur/init.

Reply

Marsh Posté le 08-09-2003 à 18:03:15    

merci pour ton aide. Il affiche toujour qu'il trouve rien mais je vais chercher alors d'ou poourrait kan meme venir ce prob

Reply

Marsh Posté le 08-09-2003 à 18:03:57    

C:\labo1\Debug>main 1 Path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path
impossible de trouver la valeur de path

Reply

Marsh Posté le 08-09-2003 à 18:09:54    

Ben euh  :??: le bout de code semble marcher, vient de tester sur 76 var ds Path sous Win et Solaris ds un soft la pour voir, juste a mettre le nom exact avec la case de la var d'env.
 
Enfin comme chrish ou moi l avons marqué, mieux vaudrait faire ca en version case insensitive


Message édité par VisualC++ le 08-09-2003 à 18:10:42
Reply

Marsh Posté le 08-09-2003 à 18:13:10    

VisualC++ a écrit :

Ben euh  :??: le bout de code semble marcher, vient de tester sur 76 var ds Path sous Win et Solaris ds un soft la pour voir, juste a mettre le nom exact avec la case de la var d'env.
 
Enfin comme chrish ou moi l avons marqué, mieux vaudrait faire ca en version case insensitive


chrish ?
mais qui c'est cet ursupateur ? :O

Reply

Marsh Posté le 08-09-2003 à 18:13:43    

oups desole :jap:

Reply

Marsh Posté le 08-09-2003 à 18:13:43   

Reply

Marsh Posté le 08-09-2003 à 18:16:59    

Ok sa fonctionne merci du coup de main.

Reply

Marsh Posté le 08-09-2003 à 18:36:27    

vous serez gentil de faire du C++ avec les std::string et de faire gaffe aux bornes (s'arreter quand truc[x]==NULL)

Reply

Marsh Posté le 26-08-2012 à 20:47:54    

zouzouille a écrit :

Quelqu'un pourrait il m'aider,le sujet est simplemais j'y arrive pas :-).
 
En faite je creer un pgm où je lui fourni des parametre et en retour il doit me donner le numero ou ce trouve le parametre.
 
Exemple:      main 1 Path,j'aimerai qu'il me retourne la ligne(normalement c'est la 15 qui contient la variable d'environnement Path). Pour pouvoir executé le pgm, il faut utilisé command et tapé aller dans le repertoire du debug du pgm et tapé le nom du pgm suivi de 1 et du mot Path.
 
Pourriez vous me dire pourquoi quand je compare ARGV[2](C'est Path entrer en parametre), il ne le trouve pas dans ENVP.(contient toute les variable)Pour voir les variable taper" set "dans command.
 
 
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>  
 
int main(int argc ,char *argv[],char *envp[])
{
 
 if (strcmp(argv[1],"1" )==0)
 {
  for(int x=0;x<20;x++)
  {
   if (strcmp(envp[x],argv[2])==0)
   {
    cout << "trouve" << endl;
   }
   else
   {
    cout << "impossible de trouver la valeur de path" << endl;
   }
  }
 }
 else  
 {
  cout << "Numero correspond pas(1 ou 2 ou 3)" << endl;  
 }
return 0;
}


 
Salut Camarade programmeur,
 
Pas la peine d'employer la force brute mon ami.
 
Le problème vient tout simplement de ton test.
 
As-tu oublié ce que tout bon programmeur ne devrait pas oublier, surtout en C, ceci :
 
Ton argument en ligne de commande :  
 
Path ou PAth ou PATH (peu importe),
 
et l'entrée de la table des variables d'environnement :
 
PATH=c:\windows\system;c:\windows\system32;...
 
Or; si tu compares ton PATH passé en ligne de commande avec l'entrée de cette table,
 
la fonction strcmp(Adresse de ton argument,entrée de la table des variables d'environnement contenant 'PATH') ne te retournera jamais 0 ;
 
à moins que l'entrée de la table ne contienne que 'PATH'
 
et à condition que tu aies tout converti en majuscules ou tout en minuscules !
 
Stop aux if, aux boucles for, aux boucles while, etc...
 
Je t'ai donné des pistes, à toi de les explorer.
 
Mais de grâce, épargne-moi cette écriture alambiquée du langage C.
 
Ce langage, d'une efficacité redoutable lorque les programmes sont bien écrits et bien conçus, mérite mieux, mais beaucoup mieux que cela.
 
Zeltron2048.

Reply

Marsh Posté le 27-08-2012 à 02:43:14    

Ha, t'es bien gentil mais au bout de 9 ans il a du laisser tomber :o


---------------
Perhaps you don't deserve to breathe
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed