Bonjour à tous

J'ai un souci avec le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
std::list<const char *> MyClass::getEnvParametersMatching(const char *keyRegex) 
{
  std::list<const char *> *listRet = new std::list<const char *>();
 
  static regex_t patternBuf;
 
  extern char **environ;
  char strEnviron[256];
  char* pchVarName = NULL;
 
  if ( regcomp( &patternBuf, keyRegex, REG_EXTENDED ) == 0 )
  {
    // Parcours de l'environnement
    while ( *environ != NULL )
    {
    	// Extrait le nom de la variable
    	strcpy( strEnviron, *environ );
    	pchVarName = strtok( strEnviron, "=");
 
	// Si la clé correspond
    	if (regexec( &patternBuf, pchVarName, 0, 0, 0 ) == 0)
    	{	
    	    // On l'ajoute à la list
    	    listRet->push_back( *environ ); // SEG FAULT ???
    	}
 
    	// Variable d'environnement suivante
    	environ++;
    }
  }
 
  return listRet;
}
J'essaie d'insérer *environ ( qui est une chaîne de caractères, n'est-ce pas ? ) dans ma liste, mais j'ai systématiquement une segmentation fault à ce niveau...
S'il est effectivement impossible d'ajouter une chaine "VAR=VAL" dans ma list, est-ce que vous auriez une idée pour ajouter simplement le nom de la variable ( VAR ) dans la list ?

Auriez-vous une idée d'où se trouve le problème ?

Par ailleurs, on m'a dit sur le forum C qu'il était interdit de faire environ++. Alors comment parcourir les variables d'environnement autrement ?

Merci d'avance !