C char array zurückgeben

Nano

Foren As
Beiträge
93
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" )
 

baggio

Jungspund
Beiträge
11
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.
 

floyd62

Routinier
Beiträge
324
... oder du machst den String in bla() statisch:
Code:
char * bla(){
    static char str[40];
    ...
    return str;
}
 
G

Gast1

Gast
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:

Domme.

Mitglied
Beiträge
33
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.
 

bytepool

Code Monkey
Beiträge
791
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

iptables - default policy - Server macht dicht

seltsames String-Handling C++

Problem mit Apache2 + MySQL Server

Amavis & Benachrichtigungen

Oben