2012-12-05 7 views
85

memset() wird deklariert, um void* zurückzugeben, das ist immer der gleiche Wert wie die in die Funktion übergebene Adresse.Was nutzt der Rückgabewert von memset()?

Welchen Nutzen hat der Rückgabewert? Warum gibt es nicht void zurück?

+0

Konsistenz mit den anderen 'mem *' Funktionen, die meistens 'void *' zurückgeben? –

+9

http://thevirtualmachinist.blogspot.co.uk/2010/08/whats-return-value-of-memset.html – BoBTFish

+0

@BoBTFish Nizza Link. – Cartesius00

Antwort

33

Die Signatur steht im Einklang mit allen anderen ähnlichen Funktionen: memcpy(), strcpy() usw. Ich dachte immer, dies getan wurde eine Ketten Anrufe zu ermöglichen, solche Funktionen und sonst solche Aufrufe in Ausdrücken zu verwenden.

Das gesagt, ich bin nie auf eine reale Situation gestoßen, in der ich mich gezwungen fühlen würde, den Rückgabewert auf diese Weise zu verwenden.

115

Es kann für die Anrufverkettungs wie verwendet werden:

char a[200]; 
strcpy(memset(a, 0, 200), "bla"); 
+9

Ja, es ist definitiv der 'Verkettungs' Anwendungsfall. – Cartesius00

+6

Ich habe die Antwort upvoted, weil es ein interessanter Fall ist. Aber im wirklichen Leben denke ich, es ist besser, die memset und strcpy Anrufe getrennt zu halten. –

+23

C-Programmierer lieben unlesbaren Code, so dass unendliche Verkettungen möglich sind, wenn eine Standardfunktion entworfen wird. –

12

Um die Funktion als Argument für eine andere Funktion wie sprintf

0

ich auf diese Frage kam zu verwenden, wenn googeln, um zu sehen, was Memset zurückgegeben.

Ich habe einen Code, wo ich für einen Wert testen, dann, wenn das wahr ist, testen Sie, ob ein Wert Nullen ist.

Da es in C keinen vollständig portablen Weg gibt, um nach Nullen zu suchen, muss ich Memset in der Mitte laufen lassen.

So ist mein Code:

if (a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0)) 

Dies zu dem Verkettungs Zweck in den vorherigen Fragen aufgelistet spricht, aber es ist ein Beispiel für eine Anwendung für diese Technik.

Ich überlasse es anderen zu beurteilen, ob dies eine gute Codierung ist oder nicht.