memset()
est déclarée renvoyer void*
qui est toujours la même valeur que l'adresse passée dans la fonction.
Quelle est l'utilité de la valeur de retour? Pourquoi ne revient-il pas void
?
memset()
est déclarée renvoyer void*
qui est toujours la même valeur que l'adresse passée dans la fonction.
Quelle est l'utilité de la valeur de retour? Pourquoi ne revient-il pas void
?
strcat()
? Parfois, les fonctions standard sont ce qu'elles sont spécifiées et non ce qu'elles devraient être.
Réponses:
La signature est conforme à toutes les autres fonctions similaires: memcpy()
, strcpy()
etc. J'ai toujours pensé cela a été fait pour permettre de enchaîner les appels à ces fonctions, et d' utiliser autrement ces appels dans les expressions.
Cela dit, je n'ai jamais rencontré de situation réelle dans laquelle 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");
strcpy
de renvoyer le pointeur au-delà du dernier copié. memset(my_strcpy(a, "bla"), 0, a + 200);
(comme std::copy_n
et std::fill_n
faire en C ++).
Je suis tombé sur cette question en cherchant sur Google pour voir ce que memset retournait.
J'ai un code dans lequel je teste une valeur, puis si c'est vrai, testez si une valeur est égale à des zéros.
Comme il n'y a pas de moyen complètement portable en C de tester les zéros, je dois exécuter memset au milieu.
Donc mon code est:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Cela témoigne de l'objectif de chaînage indiqué dans les questions précédentes, mais c'est un exemple d'utilisation de cette technique.
Je laisserai aux autres le soin de juger si c'est un bon codage ou non.