Zitat:
Original geschrieben von Flink
Wobei aus logischen Gründen diese Zeile
erg=(char *)"Fehler"; //wenn ich char
ersatzlos gestrichen werden kann.
|
Das ist Gewohnheit und bleibt schön im Programmcode.
Wenn nicht alle logischen Fälle abgedeckt werden, wird auf den String "Fehler" verwiesen. Das ist nicht nur recht und billig, sondern programmatisch notwendig. Eine Redundanz hier in diesem Fall zu eleminieren ist strategisch nicht zu vertreten.
Zitat:
Allerdings ist dieser Code problematisch. Nach dem Verlassen der Funktion char * stab(double hm) gibt es keine Garantie mehr, dass die Speicheradressen, die vorher "stabil", "indifferent" oder "labil" als Inhalt hatten, dies noch tun werden. Sobald eine Funktion verlassen wird, kann im Rechner der von der Funktion belegte Speicher wieder freigegeben werden. Es ist nämlich möglich, dass der RAM-Speicher vorübergehend auf die Festplatte ausgelagert wird (virtueller Speicher). Daher sollte tunlichst der Speicher explizit über malloc oder ein statisches Array reserviert werden. (static oder eben eine globale Variable). Dann ist aber ein strcpy erforderlich.
|
Dieser Code ist deswegen nicht problematisch, weil der Compiler Stringliterale am Heap ablegt, ggf. idente Stringliterale als eine Instanz (Vorkommen) zusammenzieht, falls dieser Schalter gesetzt wurde.
Diese Art von Initialisierung wandert somit auf den Heap (deutsch Halde) und ist per definitionem als statisch zu bezeichnen.
Ich kann hier leider nicht mit Gefühlsbeschwichtigungen dienen, dies sind die Tatsachen, Gegenbeweise noch ausstehend.