Wozu dient der Rückgabewert von memset()?

Lesezeit: 3 Minuten

memset() wird zur Rückkehr erklärt void* das ist immer derselbe Wert wie die an die Funktion übergebene Adresse.

Wozu dient der Rückgabewert? Warum kehrt es nicht zurück void?

  • thevirtualmachinist.blogspot.co.uk/2010/08/…

    – BoBTFisch

    5. Dezember 2012 um 9:59 Uhr

  • Wozu dient der Rückgabewert von strcat()? Manchmal sind Standardfunktionen das, was sie sein sollen, nicht das, was sie sind sollte sein.

    – DevSolar

    5. Dezember 2012 um 10:18 Uhr

  • @MatthieuM.: Außerdem sind mit der Rückgabe von Sachen im Allgemeinen Kosten ungleich Null verbunden. Auch wenn der Rückgabewert in ein Register passt, müssen Sie diesen Wert im Allgemeinen in das Register laden. Dies hat einen Preis, wenn auch klein.

    – NPE

    5. Dezember 2012 um 10:39 Uhr


  • @sharptooth: Eine Funktion “alle Menschen töten” würde natürlich die Anzahl der getöteten Menschen zurückgeben.

    – individuell

    5. Dezember 2012 um 14:31 Uhr

  • @MatthieuM.: Du würde mich nicht um solche Kleinigkeiten kümmern, aber ich sicherlich könnte. Was ist, wenn ich einen Compiler für ein System mit begrenzten Ressourcen schreibe? Hmmm?

    – Thomas Eding

    18. Dezember 2012 um 22:43 Uhr

Es kann für die Anrufverkettung verwendet werden wie:

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

  • Ja, es ist definitiv der Anwendungsfall „Verkettung“.

    – Cartesius00

    5. Dezember 2012 um 9:59 Uhr

  • Ich habe die Antwort positiv bewertet, weil es ein interessanter Fall ist. Aber im wirklichen Leben denke ich, dass es besser ist, die memset- und strcpy-Aufrufe getrennt zu halten.

    – Zwetomir Dimitrow

    12. Dezember 2012 um 12:33 Uhr

  • C-Programmierer lieben unlesbaren Code, daher ist es beim Entwerfen einer Standardfunktion ein Muss, unendliche Verkettungen zuzulassen.

    – Tschad Schouggins

    13. Dezember 2012 um 3:58 Uhr

  • @ChadSchouggins Lesen Sie etwas Haskell-Code und Sie wissen, dass C-Programmierer eigentlich ziemlich wörtlich sind;) (denkt an Regex “Operator” = ~) …

    – BitTickler

    23. April 2015 um 12:58 Uhr

  • Natürlich wäre es in diesem Beispiel auch umgekehrt sinnvoller gewesen, z strcpy um den Zeiger über den zuletzt kopierten zurückzugeben. memset(my_strcpy(a, "bla"), 0, a + 200); (wie std::copy_n und std::fill_n in C++ tun).

    – alfC

    16. August 2019 um 0:34 Uhr

Benutzeravatar von NPE
NPE

Die Signatur steht im Einklang mit allen anderen ähnlichen Funktionen: memcpy(), strcpy() usw. Ich dachte immer, dass dies getan wurde, um Aufrufe an solche Funktionen zu verketten und solche Aufrufe anderweitig in Ausdrücken zu verwenden.

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

Benutzeravatar von Noah
Noah

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

Benutzeravatar von Gerard Nicol
Gerhard Nicol

Ich bin auf diese Frage gestoßen, als ich gegoogelt habe, um zu sehen, was Memset zurückgegeben hat.

Ich habe einen Code, in dem ich auf einen Wert teste, und wenn das wahr ist, teste, ob ein Wert Nullen ist.

Da es in C keinen vollständig portablen Weg gibt, um auf Nullen zu testen, muss ich memset in der Mitte ausführen.

Also mein Code ist:

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

Dies spricht für den in den vorherigen Fragen aufgeführten Zweck der Verkettung, ist jedoch ein Beispiel für die Verwendung dieser Technik.

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

1420110cookie-checkWozu dient der Rückgabewert von memset()?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy