Funktion mit Char Array als Rückgabe


  • Mod

    Seldon, deine zweite Variante ist weder üblich noch gut. Sie hat noch viel mehr Nachteile (und viel schlimmere) als den, den du nennst. Lieber ganz schnell vergessen.



  • Buffer + Länge findet man andauernd. Fehlercode als Rückgabewert ist in C auch üblich; Exceptions hat man hier ja nicht. Denk an snprintf und dergleichen. Ich bin mir nicht sicher, worauf du hinaus willst.

    Kritik an Ansatz 3 könnte ich eher verstehen, aber wenn man zum Beispiel die benötigte Bufferlänge zur Compilezeit überhaupt nicht abschätzen kann, kommt man da mitunter stumpf nicht herum. Auch hierfür gibt es Präzedenzfälle, beispielsweise strdup. Mit VLAs lässt sich da einiges mehr drehen, aber für alle Zwecke reicht das auch nicht.

    Es gibt sogar manchmal eine Kombination aus Ansätzen 2 und 3, um überflüssige Allokationen zu sparen. GNUs getline() ist dafür ein Beispiel.


  • Mod

    Ähh, ich meine Ansatz 3, nicht 2. 'Tschuldigung, der erste ansatz war so kurz, den habe ich übersehen 🙂 .

    GNU getline würde ich nicht unbedingt als gutes Vorbild zitieren. VLAs auch nicht. Um Ansatz 3 kommt man auch leicht herum, indem man so etwas wie eine Stringklasse baut. Dann findet zwar technisch gesehen das malloc in der Funktion statt, aber der Benutzer braucht das gar nicht zu wissen oder zu kümmern, was da passiert.



  • Das ist eben die Crux von C mit char-arrays. Es sind nur Zeiger auf char ohne klare Länge des arrays (string). Das Ende ist das Nullzeichen '\0'. Wer damit nicht leben will, nimmt einen anderen Compiler, der den 'Datentyp' string kennt. Wäre schon einmal einen Umstieg auf z.B. C++ wert, auch wenn man dort zunächst nur die string-Klasse verwendet.



  • Was heißt "nur"?
    Gut, man könnte sich auch in C so etwas basteln. Aber in C++ ist halt die bessere Syntax und die automatischen Speicherfreigabe.



  • Hallo zusammen,
    ich verstehe das 2. Beispiel von seldon nicht.
    wie muß ich das auf mein Code anwenden ?

    Kann mir jemand mal ein Beispiel geben auf meinen Code bezogen.

    Danke.



  • informiere dich, wie man die funktionen malloc/calloc in verbindung mit der funktion free benutzt.
    dann verstehst du es.
    http://www.cplusplus.com/reference/cstdlib/malloc/
    http://www.cplusplus.com/reference/cstdlib/free/



  • wau alta,
    deinen optimismus hätte ich auch gern 🤡



  • Nathan schrieb:

    Aber in C++ ist halt die bessere Syntax

    Ich lach mich tot.

    Nathan schrieb:

    und die automatischen Speicherfreigabe.

    Ach ja? Du schwätzt Unsinn.



  • Wutz schrieb:

    Nathan schrieb:

    Aber in C++ ist halt die bessere Syntax

    Ich lach mich tot.

    hervorragende idee!

    Wutz schrieb:

    Nathan schrieb:

    und die automatischen Speicherfreigabe.

    Ach ja? Du schwätzt Unsinn.

    es gibt desktruktoren, wohl noch nie was von gehört.


Anmelden zum Antworten