Lassen Sie das Makro einen Wert zurückgeben

Bin ich mit einem makro und ich denke, es funktioniert gut -

#define CStrNullLastNL(str) {char* nl=strrchr(str,'\n'); if(nl){*nl=0;}} 

So funktioniert es auf null aus den letzten Zeilenumbruch in einem string, kann wirklich sein verwendet, um abhacken der Zeilenumbruch, wenn es Links auf die von fgets.

So, ich wundere mich, wenn ich kann "return" einen Wert aus dem makro, so kann es genannt werden wie

func( CStrNullLastNL( cstr ) ) ; 

Oder muss ich eine Funktion schreiben, die

Kommentar zu dem Problem
Sie müssen nicht schreiben-nur mit strtok(str, "\n"). Es ist zwar nicht das, was strtok() wurde wirklich entwickelt, es macht den job perfekt (in der Tat, es ist eine der wenigen guten Anwendungen für strtok()). In C++ sollten Sie nur verwenden Sie std::getline() statt fgets(), wenn. Kommentarautor: Jerry Coffin
Was wollen Sie es zurück? Kommentarautor: slacker
@Jerry Sarg: Wäre das nicht, ersetzen Sie die ERSTE newline statt der Letzte? Kommentarautor: Fred Larson
@Fred:fgets liest nur eine Zeile, also der erste ist auch der Letzte (und immer das Letzte Zeichen in der Zeichenfolge, wenn es vorhanden ist). Wenn Sie in einigen völlig anderen situation, wo man vielleicht mehr als einen haben, dann ja, es würde aufhören, und bei der ersten. Kommentarautor: Jerry Coffin
Wenn Sie wissen, die \n ist entweder das Letzte Zeichen der Zeichenfolge ist oder nicht vorhanden ist, dann brauchen Sie nicht, etwas schicker als strlen(). Kommentarautor: Mike DeSimone

InformationsquelleAutor der Frage bobobobo | 2010-04-20

Schreibe einen Kommentar