Salut,<br><br>Am rezolvat dilema :<br><br>Cod :<br>========================================<br>#include <stdlib.h><br>#include <stdio.h><br>#include <string.h><br><br>int main(int argc, char ** argv){<br>
char * rez ;<br> char * var = (char *) malloc (10);<br> if (! var) return -1;<br> strcpy(var,"$HOME");<br><br> printf(" var = %s \n", var);<br> rez = getenv(var);<br>
printf(" rez pentru var %s =%s \n", rez, var);<br><br> rez = getenv(var+1);<br> printf(" rez pentru var+1 : %s = %s \n", rez, var+1);<br><br> free(var);<br><br> //cazul cu argv[1] = "$HOME"<br>
printf("argv[1] = %s \n", argv[1]);<br> rez = getenv(argv[1]);<br> printf("pentru argv[1] = var mediu = %s \n", rez);<br> free(rez);<br> return 0;<br>}<br>===========================================<br>
<br><br>Rezultat :<br>==========================================<br>so@elmer:~/teme/tema1_linux/teste_moi$ ./a.out $HOME<br> var = $HOME<br> rez pentru var (null) =$HOME<br> rez pentru var+1 : /home/so = HOME<br>argv[1] = /home/so<br>
pentru argv[1] = var mediu = (null)<br>so@elmer:~/teme/tema1_linux/teste_moi$<br>============================================<br><br>Concluzia mea (nu stiu daca este corecta in totalitate) : <br> - deja cand ii dau ca parametru $HOME, el face interpretarea si in argv[1] nu imi va stoca $HOME ci chiar valorea variabilei si pe urma va face un getenv("/home/so") si nu o va gasi si va intoarce 0<br>
- legat de 1) : "<i>De ce faci argv[1] + 1? E suficient argv[1]</i>. " getenv primeste ca parametru numele variabilei de mediu fara $ [am testat exemplele cu var si var +1).<br><br><br>Multumesc<br>Ana<br>