2015-06-02 10 views
5

Was ist der Rückgabewert von strrev()? Auch nach dem Umkehren der Zeichenfolge wird der Wert in der angegebenen Zeichenfolge geändert.Was ist der Rückgabewert in strrev()?

Beispiel: char *strrev(char *src); Hier, nachdem die Zeichenfolge umgekehrt wurde, wird der Ausgang in der src vorhanden sein. In welchem ​​Fall wird die Zeichenfolge zurückgegeben?

Entweder der Rückgabewert oder die Zeichenfolge, die wir übergeben, fungiert auch als Ausgabe, das ist genug. Was ist in diesem Fall der Rückgabewert von strrev()?

+2

Es ermöglicht die Verkettung von string-manipulierenden Aufrufen – Baldrick

+3

Spoiler: Es gibt keine _standard_ 'strrev()'. –

+4

Sie könnten das Ergebnis direkt für die weitere Verarbeitung verwenden, zum Beispiel in 'printf ("% s \ n ", strrev (str));' oder 'do_more_stuff (strrev (str))'. –

Antwort

5

Um Verketten zu ermöglichen.

Stellen Sie sich vor, Sie wollten eine Zeichenkette umkehren, dann kehren Sie sie wieder zurück (konstruiertes Beispiel, aber es macht den Punkt). Mit Verkettungs, können Sie dies tun:

strrev(strrev(charBuffer)); 

Wenn sttrev zurück void, würden Sie tun müssen:

strrev(charBuffer); 
strrev(charBuffer); 

das gleiche Ergebnis zu erhalten.

Wie @WernerHenze in seinem Kommentar sagt, es erlaubt Ihnen auch mit dem Ausgang in Funktionsaufrufe direkt zu arbeiten, wie folgt aus:

printf("%s\n", strrev(charBuffer)); 

Die Möglichkeit, im Grunde von Verkettungs mehr Flexibilität für den Programmierer gibt, wie Der Code ist strukturiert.

0

Verketten macht mehr Sinn, aber es kann auch in einer unwahrscheinlichen Mikrooptimierung verwendet werden. Sie können verhindern, dass während des Aufrufs ein temporärer Wert auf dem Stapel gespeichert wird. ZB .:

char *fn(char *s) { 
    strrev(s); 
    strlwr(s); 
    return strstr(s, "secret"); 
} 

Über die Anrufe strrev() und strlwr() Sie eine sichere Kopie s für die spätere Verwendung zu halten brauchen. Sie können dieses Register beseitigen speichern mit:

char *fn(char *s) { 
    s = strrev(s); 
    s = strlwr(s); 
    return strstr(s, "secret"); 
} 

Gemäß der Verkettungs Antwort könnte Sie auch:

char *fn(char *s) { 
    return strstr(strlwr(strrev(s)), "secret"); 
} 

Aber das Problem in komplexeren Code sein kann.

Ich habe es gerade versucht und es beseitigt drei mov Anweisungen. Yay!!

Verwandte Themen