memset()
é declarado para retornar void*
que é sempre o mesmo valor que o endereço passado para a função.
Qual é a utilidade do valor de retorno? Por que não volta void
?
memset()
é declarado para retornar void*
que é sempre o mesmo valor que o endereço passado para a função.
Qual é a utilidade do valor de retorno? Por que não volta void
?
strcat()
? Às vezes, as funções padrão são o que devem ser, não o que deveriam ser.
Respostas:
A assinatura está em linha com todas as outras funções semelhantes: memcpy()
, strcpy()
etc. Eu sempre achei que isso foi feito para permitir um para chamadas cadeia para tais funções, e de outra forma utilizar tais chamadas em expressões.
Dito isso, nunca me deparei com uma situação do mundo real em que me sentisse compelido a usar o valor de retorno dessa maneira.
Pode ser usado para encadeamento de chamadas como:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
retornar o ponteiro após o último copiado. memset(my_strcpy(a, "bla"), 0, a + 200);
(como std::copy_n
e std::fill_n
fazer em C ++).
Eu me deparei com essa pergunta ao pesquisar no Google para ver o que o conjunto memset retornou.
Eu tenho algum código onde teste um valor, então, se for verdade, teste para ver se um valor é zeros.
Como não existe uma maneira totalmente portátil em C de testar zeros, tenho que executar o memset no meio.
Então, meu código é:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Isso se refere ao propósito do encadeamento listado nas questões anteriores, mas é um exemplo de uso para essa técnica.
Vou deixar para os outros julgarem se essa codificação é boa ou não.