web-dev-qa-db-fra.com

Quelle est l'utilité de la valeur de retour memset ()?

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?

87
sharptooth

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.

33
NPE

Il peut être utilisé pour le chaînage d'appels comme:

char a[200];
strcpy(memset(a, 0, 200), "bla");
119
Juraj Blaho

Afin d'utiliser la fonction comme argument pour une autre fonction telle que sprintf

12
Noah

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.

0
Gerard Nicol