C char array zurückgeben

N

Nano

Foren As
Hallo zusammen eine wohl recht simple frage leider scheint irgend ein verständnisproblem bei mir zu herrschen


Code:
char * bla(){

    char str[40];
    return *str;

}

ich möchte gerne den "string" str zurückgeben, bzw das char array
return str; bzw &str; funktionieren auch nicht, leider verstehe ich nicht warum es falsch ist.

Ich möchte dein Zeiger auf das arry str[40] bzw auf dessen anfang zurückgeben ( also quasi den "string" )
 
In deinem Beispiel wird der Speicher für das Array auf dem Stack angelegt. Nach Verlassen der Funktion wird dieser wieder freigegeben. Mit dynamisch allokierten Speicher sollte das ganze funktionieren:

Code:
char *fct(){
  char *str = (char *) malloc(40 * sizeof(char));
  return str;
 }

Nach dem Benutzen des Strings muss der allokierte Speicher natürlich wieder freigegeben werden.

Gruß, baggio.
 
... oder du machst den String in bla() statisch:
Code:
char * bla(){
    static char str[40];
    ...
    return str;
}
 
Gib der funktion einfach die adresse mit, an der der string liegen soll:
Code:
void bla(char *dest, size_t max)
{
 char tmp[1000];
 //...
 strncpy(dest, tmp, max);
 return;
}
Dann isr dein string auch nach dem nächsten aufruf von bla vorhanden, und du brauchst dich nicht um die speicherfreigabe kümmern (zumindest nicht von etwas, dass in bla reserviert wurde)
 
Zuletzt bearbeitet von einem Moderator:
Du könntest deinen String auch in einer Struktur verpacken und dann zurückgeben.

Code:
struct char_array { char string[20]; };

struct char_array bla()
{
      struct char_array str;
      /* ...*/
      return str;
}


so sollte es auch gehen.

Gruß D.
 
Du könntest deinen String auch in einer Struktur verpacken und dann zurückgeben.

Hehe, langsam wird es aber echt abenteuerlich hier. Er koennte sich natuerlich auch objekt orientierte features um C herum bauen, und Garbage Collection implementieren. ;)

Dazu faellt mir mal wieder dieser schoene alte Witz ein:
http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html

Sorry fuer das Off-Topic, aber ich find das irgendwie grad so schoen passend hier. ;)

mfg,
bytepool
 

Ähnliche Themen

Xubuntu - AVR32-linux crosscompile sqlite

Int nach Zeichenkette str in Binaerdarstellung

Exchange Ersatz und anmeldung der Clients über VPN

Amavis & Benachrichtigungen

Zurück
Oben