paulo1205
(usa Ubuntu)
Enviado em 27/09/2015 - 16:22h
Sobre
memcpy(), ela serve para copiar blocos de memória, com quaisquer tipos de dados e valores, desde que se saiba o tamanho a ser copiado.
Digo isso porque ao indicar que serve para copiar strings, pode-se ter a impressão de que ela é redundante com
strcpy() ou
strncpy(), que interrompem a cópia ao encontrar um byte nulo (usado pelo C para marcar o fim de um string de texto). Não é o caso de
mempy(). Isso deveria ficar claro, inclusive, pelos tipos dos argumentos indicadores de origem e destino, que são
void * em
memcpy(), e
char * em
strcpy() e
strncpy().
Com relação a
putenv()/
setenv() -- eu prefiro e recomendo
setenv() --, trata-se de uma função que modifica variáveis do ambiente de execução. Essas variáveis afetam o processo corrente e possivelmente processos que sejam seus descentes, mas não altera o ambiente de execução do processo pai ou de outros processos não-relacionados.
Como mostrou o listeiro_037, algumas variáveis de ambiente, tais como
PATH,
USER,
HOME,
LANG,
LC_ALL,
EDITOR ou
TMPDIR, entre outras, têm significado padronizado para muitas ferramentas do sistema. Por conseguinte, elas afetam também funções da biblioteca do C que dependem de algumas dessas ferramentas externas, tais como
system() e
popen(), que dependem do shell para executar comandos externos. Também as funções
execl(),
execlp(),
execv() e
execlp(), mesmo sem usar o shell externo, preservam o ambiente do processo atual antes de invocar o comando novo, e, no caso das que têm sufixo
p, ainda utilizam o valor de
PATH para encontrar o comando a ser executado.