# C++ - char als Rückgabewert



## Puepue (21. Dezember 2010)

*C++ - char als Rückgabewert*

Hallo zusammen,
habe eine vermutlich ziemlich dumme Frage (zumindest befürchte ich das gerade)
Ich habe eine Funktion, die nur einen Buchstaben zurückgebensoll (und es ist sicher immer genau einer) - deshalb würde ich gerne mit sowas hier arbeiten:

```
char buchstabe[2] = "A";
return buchstabe;
```
Wie ich das mit dynamisch allokiertem Speicher hinbekommen würde, ist nicht das Problem, aber wie muss die Funktion aussehen, um buchstabe zurückzugeben?

Wenn ich bspw. 
	
	



```
char[2] getCharAt(int position)
```
 mache, dann wirft mir VS Fehler um die Ohren - komm ich nicht um den ganzen dynamischen Mist drumherum?


----------



## bingo88 (21. Dezember 2010)

*AW: C++ - char als Rückgabewert*

char[] ist intern ein Zeiger (also char*). Das Zurückliefern von Zeigern ist in 98% der Fälle problematisch

Ich weiß jetzt nicht, ob ich dich richtig verstanden habe, ich versuche es aber trotzdem mal ^^:

```
char getCharAt(char[] buf, int pos)
{
    return buf[pos]; // return *(buf + pos) in Zeiger-Form
}
```


----------



## Fragile Heart (22. Dezember 2010)

*AW: C++ - char als Rückgabewert*

Wie sieht denn deine Funktion nach der Änderung aus? Was meinst du genau mit dynamisch? Ich nehme mal an GetCharAt ist deine Funktion, die Frage ist da worauf greift die dann zu und soll diese auch ein char[2] zurück liefern. 

Wenn dem so sein soll, dann musst du immer brücksichtigen wie so ein String in C/C++ aufgebaut werden muss. Und zwar hast du da immer ein Textteil der von einen binären 0 abgeschlossen wird. 

Beispiel: "BlaBlaBla<0>"

Das <0> soll die binäre 0 darstellen. Wenn ich daraus etwas ein Zeichen als String zurück geben will dann muss das auch entsprechend vorbereitet sein. Da ich deine Funktion nach dem Umbau nicht kenne, verwende ich die Variablen char* OriginalText (Text aus dem was ermittelt werden soll) und int Position (Position des gesuchten Zeichens) einfach zum auslesen 


```
char buchstabe[2];
buchstabe[0] = OriginalText[Position];
buchstabe[1] = 0;
return buchstabe;
```


----------



## DubioserKerl (25. Dezember 2010)

*AW: C++ - char als Rückgabewert*



Puepue schrieb:


> Hallo zusammen,
> habe eine vermutlich ziemlich dumme Frage (zumindest befürchte ich das gerade)
> Ich habe eine Funktion, die nur einen Buchstaben zurückgeben soll (und es ist sicher immer genau einer)
> Wie ich das mit dynamisch allokiertem Speicher hinbekommen würde, ist nicht das Problem, aber wie muss die Funktion aussehen, um buchstabe zurückzugeben?
> ...



Wenn es immer der selbe Buchstabe ist, dann macht man das mit einfachen Anführungszeichen:


```
return 'A';
```

Wenn es ein Buchstabe sein soll, der als String gespeichert ist, dann sieht das so aus:


```
char buchstabe[2] = "A";
return buchstabe[0];
```

DK


----------



## Ska1i (30. Dezember 2010)

*AW: C++ - char als Rückgabewert*

Ich versteh zwar überhaupt nicht, was du vorhast  aber wenn ich es richtig Verstehe willst du in einer Funktion ein Array erzeugen und zurück geben, was meistens problematisch ist, da es gültigkeitsbereiche gibt etc. und nach dem Funktionsaufruf sind die Variablen "futsch" bzw. Leichen im Speicher. Ich würde das hier mal Probieren, wenn ich dich richtig verstehe:


```
void getCharAt(char* text, int position) //Warum get??? Ist doch ein SetAtPosition ?!
{
   text[position] = 'A';
   return;
}
```
und ein Aufruf in deinem Code sieht so aus:


```
...
char[2] buchstabe; //Länge 2, aber position 0 und 1!
getCharAt(buchstabe, 1) //hinten was anfügen.
```

jetzt steht in buchstabe dein Wert drin, denn die Funktion setzt.

Den Sinn versteh ich aber nicht  Vielleicht gibt's eine bessere Lösung, wenn du schreibst, was du vor hast 

du kannst das auch mit einem String lösen, was im endeffekt ein dynamisch char-array ist:


```
string getCharAt(int position) //braucht man position, wenn es immer 2 ist? 
{
   //wir brauchen position:
   string buchstabe = string(position, 'A'); // es wird ein "position" langer String erzeugt und überall steht "A"
   return buchstabe;
}
```

und beim aufruf:


```
string buchstabe = getCharAt(10);
cout << buchstabe.c_str()[9] << endl; //  c_str liefert  [FONT=monospace]char*, dass auch als [] interpretiert werden kann!
[/FONT]
```

So, jetzt will ich wissen, was du vor hast


----------

