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");
strcpyretornar o ponteiro após o último copiado. memset(my_strcpy(a, "bla"), 0, a + 200);(como std::copy_ne std::fill_nfazer 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.