char mit return übergeben?
-
Hallo,
kann man mit return aus einer Funktion eine char Variable mit z.B. der Länge 9 an die main Funktion zurückgeben??
char test[9];
Danke für euere Hilfe.
Frostie
-
char Variablen haben immer die Länge 1. Du willst wohl ein Array von chars zurückgeben.
Da würde ich einen Container benutzen wie std::vector oder std::string.
-
Ja, einfach mit Pointer.
-
Danke für die schnelle Hilfe!
Kann mir jemand eine kurzen Code als Beispiel schreiben.
Danke
Frostie
-
char * funktion (void) {
return new char[8];
}aber schöner ist
string & funktion (void) {
return new string;
}und noch schöner:
string & funktion (string * pointer) { // der Benutzer muss eine Variable übergebn die man füllt, statt heimlich new zu benutzen
pointer = new string;
return *string;
}
-
char * f(){ char * a = new char[9]; return a; }
Ich würde allerdings nicht behaupten das ein char eine Länge hat, sondern eine Größe und das wäre dann 1 Byte.
-
Wenn die Länge aus irgendeinem Grund fest ist, kannst du das Array in eine struct verpacken und zurückgeben. Ansonsten einen std::string zurückgeben, aber bitte ohne new, Referenzen und Zeiger:
std::string funktion() { return "Hallo Spencer!"; }
-
Hab das jetzt so gemacht, aber,
char * f(){ char a[9]; cout << "Char eingeben: " << endl; cin >> a; char * a = new char[9]; return a; } void main(char *a) { char b[9]; f(); b = *a; cout << "Char war: " << << b << endl; return 0; }
Warum geht das jetzt nicht.
-
Du definierst in einen a in einem Gültigkeitsbereich zwei mal, übersetzt der das?
Wenn ja wundert es mich, aber da funktionieren tut das auf keinen Fall.Wenn dann so:
char * f(){ char * a = new char[9]; cout << "Char eingeben: " << endl; cin >> a; return a; }
Aber da mußt du sicherstellen das du nicht mehr als 8 zeichen einliest
(plus '\0' =9)
-
Und wo wird der Speicher wieder freigegeben ??
-
9 Byte, wen juckt´s?
Ne, mal im ernst. Am besten dann wenn er nicht mehr benötigt wird.
-
Entyl_Sa schrieb:
9 Byte, wen juckt´s?
Ne, mal im ernst. Am besten dann wenn er nicht mehr benötigt wird.Am besten automatisch und nicht auf Verlass darauf, dass der Aufrufer das auch wirklich macht.
-
So, jetzt hab ich zwar die Adresse in der main, aber wie bekomme ich das array in eine Variable??
int main(char *c) { char b[9]; cout << &c; //Gibt die Adresse aus! char b = *c; // Aber das funktioniert so nicht!! return 0; }
-
Habs selber hinbekommen:
char *b = in.funk();
Danke
Frostie
-
Optimizer schrieb:
Entyl_Sa schrieb:
9 Byte, wen juckt´s?
Ne, mal im ernst. Am besten dann wenn er nicht mehr benötigt wird.Am besten automatisch und nicht auf Verlass darauf, dass der Aufrufer das auch wirklich macht.
Und wie würdest du das automatisch machen?
-
Mit einem Destruktor. So wie bei std::string z.B.
-
Wo ist der Unterschied ob ich jetzt delete auf einen string oder delete[] auf einen char * aufrufe?
-
Bei delete[] werden häufig die "[]" vergessen.
-
Naja, das ist aber doch kein Grund.
Das ist weder einfacher noch automatisch.
-
Warum ist das nicht automatisch? Und warum ist das nicht einfacher, wenn man nicht mehr ans delete denken muss?
Wenn du was mit new erstellst und einen Zeiger darauf zurückgibst, dann verlässt du dich darauf, dass irgendjemand außerhalb deiner Funktion das Ding wieder löscht.So schreib ich einfach:
string foo() { [...] return myString; }
Und wenn der Aufrufer meine Variable nicht mehr verwendet, löscht der Destruktor automatisch das char-Array.
Mit deiner Funktion dagegen bist du darauf angewiesen, dass der Aufrufer dran denkt, delete[] zu machen.