Lunar hat geschrieben:
Natürlich, aber bei anderen Daten macht es schlicht keinen Sinn. Sorry, aber eine Funktion, die einfach nur den Ort des Systemverzeichnisses (C:\Windows) zurückgibt, muss das nicht per Referenz macht. Da reicht ein ganz normales return, dann braucht man keine vorher allokierten oder meinetwegen auch auf dem Stack angelegten Buffer, die samt expliziter Längenangabe an die Funktion übergeben werden.
Was soll denn ein "ganz normales return" sein? Du kannst ein char-Array nicht by value zurückgeben! Praktisch jede Stringhandling-Funktion in C funktioniert so, dass Du Zeiger auf irgendwelche Buffer übergibst, mit denen dann irgendwas gemacht wird. Genau deswegen *ist* C ja für Stringbehandlung so wahnsinnig beschissen: Es gibt keine Strings in der Sprache, und es gibt auch keine Möglichkeit, nutzerdefinierte Typen hinzuzufügen, die diesen Mangel ausgleichen könnten (Im Gegensatz zu C++ mit std::string).
Bei dem Fall mit dem Systemverzeichnis ist das sehr einfach zu lösen, da sich das zur Laufzeit nicht ändert. Daher kann man hierfür einfach eine globale Variable verwenden und fertig.
Hello World hat geschrieben:
Es geschieht zwar selten, aber hier sind wir tatsächlich einer Meinung (auch wenn wir verschiedene Sprachen als Alternative wählen würden 😉 )
Das wäre wohl im Einzelfall zu entscheiden. In manchen Fällen ist Performance ja wirklich bums oder I/O-limiert, und da kann's dann auch gerne mal Python sein.