memset()
est déclaré renvoyer void*
qui est toujours la même valeur que l'adresse transmise à la fonction.
Quelle est l'utilité de la valeur de retour? Pourquoi ne retourne-t-il pas void
?
La signature est en ligne avec toutes les autres fonctions similaires: memcpy()
, strcpy()
etc. J'ai toujours pensé que cela avait été fait pour permettre de chaîner les appels à ces fonctions, et d'utiliser autrement de telles appels dans les expressions.
Cela dit, je n'ai jamais rencontré de situation réelle où je me sentirais obligé d'utiliser la valeur de retour de cette manière.
Il peut être utilisé pour le chaînage d'appels comme:
char a[200];
strcpy(memset(a, 0, 200), "bla");
Afin d'utiliser la fonction comme argument pour une autre fonction telle que sprintf
Je suis tombé sur cette question lors de la recherche sur Google pour voir quel memset est revenu.
J'ai du code où je teste pour une valeur, puis si c'est vrai test pour voir si une valeur est zéro.
Parce qu'il n'y a pas de moyen complètement portable en C pour tester les zéros, je dois exécuter memset au milieu.
Mon code est donc:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Cela correspond à l'objectif de chaînage indiqué dans les questions précédentes, mais c'est un exemple d'utilisation de cette technique.
Je laisse à d'autres le soin de juger si c'est un bon codage ou non.