1) à la ligne :
ptr_env=sprintf("'%s'",ptr_env);
Il manque comme premier argument un pointeur sur une zone tampon (avant la chaîne de format).
2) Ce tampon est obligatoire, n'essaye pas de modifier directement la zone pointée par ptr_env. De même, il n'y a aucune raison que realloc marche, car il n'y a aucune raison que la zone mémoire pointée par ptr_env ait été allouée par malloc. Bref : tout ce qui est renvoyé par getenv, c'est lecture seule (si tu veux modifier l'environnement => setenv, putenv....).
3) Je ne sais pas ce que tu as essayé de faire avec char buf[100]; et malloc. Mais en tout cas, si tu déclare une variable "tampon", fais le EN DEHORS de la fonction get_env.
En effet, si tu mets buf[100]; DANS la fonction, tu crées une tableau de caractères, certes, mais il s'agit d'une variable locale à ta fonction qui disparaît dès la sortie. Gênant pour récupérer la valeur.
Avec malloc, en revanche, c'est possible de faire l'allocation à l'intérieur de la fonction en conservant la valeur renvoyée par malloc dans ptr_env, qui est alors renvoyé. A charge pour le programme appelant de libérer ensuite la mémoire.
# Pointeurs, chaînes de caractères
Posté par Charles Joubert . En réponse au message Pointeur et chaines de caractères.... Évalué à 3.
Je vois plusieurs problèmes dans ton programme :
1) à la ligne :
ptr_env=sprintf("'%s'",ptr_env);
Il manque comme premier argument un pointeur sur une zone tampon (avant la chaîne de format).
2) Ce tampon est obligatoire, n'essaye pas de modifier directement la zone pointée par ptr_env. De même, il n'y a aucune raison que realloc marche, car il n'y a aucune raison que la zone mémoire pointée par ptr_env ait été allouée par malloc. Bref : tout ce qui est renvoyé par getenv, c'est lecture seule (si tu veux modifier l'environnement => setenv, putenv....).
3) Je ne sais pas ce que tu as essayé de faire avec char buf[100]; et malloc. Mais en tout cas, si tu déclare une variable "tampon", fais le EN DEHORS de la fonction get_env.
En effet, si tu mets buf[100]; DANS la fonction, tu crées une tableau de caractères, certes, mais il s'agit d'une variable locale à ta fonction qui disparaît dès la sortie. Gênant pour récupérer la valeur.
Avec malloc, en revanche, c'est possible de faire l'allocation à l'intérieur de la fonction en conservant la valeur renvoyée par malloc dans ptr_env, qui est alors renvoyé. A charge pour le programme appelant de libérer ensuite la mémoire.
Voilà, j'espère que ça aide.
A+