char als Rüchgabe von funktionen
-
Hallo,
ich habe eine Funktion.
char a(char* b);
Nun möchte ich in der Funktion b Ändern und zurückgeben. Wie muss der Rückgabetype sein, und wie sähe so ein Pogramm aus?
-
char * funktion(char * b) { // b ändern return b; }
Das war einfach.
-
Warum der Rückgabewert?
void funktion(char* b) { // b ändern }
-
Hallo,
das ist es ja gerade. Einen Char-String in einer Funktion zu verändern ist ja ganz einfach. Aber wenn ich jetzt z.B. anstatt cTest "test" übergebe und dann ein verändertes "test" zurückgeben will, stützt das Pogramm ab. Wenn ich jetzt aber z.B. sagen will:
char * funktion(char * b) { char cString[256]; strcpy(cString,b) // cString ändern return cString; }
kommt der Fehler: warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben
Danke,
Chrissi
-
Hallo Namensvetter ;),
ich weiß zwar nicht, ob es hilft, aber, versuch doch mal, cString[256] global zu deffinieren.
Schüssi,
Chrissi
-
Dann nimm dir die Warnung mal zu Herzen.
char * funktion(char * b) { char* cString = new char[256]; strcpy(cString, b); return cString; }
std::string s sind aber cooler.
-
Ohh:
char * funktion(char * b) { char* cString = new char[256]; strcpy(cString, b); return cString; }
Das ist natürlich 10mal besser... Und funktioniert sicher auch...
-
hat aber den Nachteil, dass du nicht vergessen darfst den zurückgegebenen String zu löschen, wenn du ihn nicht mehr brauchst. Außerdem: Was passiert, wenn dein String mehr als 255+1 Zeichen hat? Wenn du unbedingt C-Strings nehmen willst, dann lieber so:
char *foo(const char *src) { char *ret = new char[strlen(src)+1]; //genügend Speicher ist sehr wichtig!!! strcpy(ret, src); //tu was... return ret; }
Besser wäre aber:
string foo(string src) { //mach was mit dem string... return src; }
Da der String bei der Übergabe an foo sowieso kopiert wird, kannst du src nach Herzenslust ändern und später einfach zurückgeben. Hat den Vorteil, dass du dich nicht mehr um das Löschen des Strings kümmern musst, das geschieht jetzt automatisch... Ach und natürlich nicht das hier am Anfang deiner Datei vergessen:
#include <string> using namespace std;
-
Also:
Entweder man lässt sich vom Benutzer bereits den String geben in den man basteln darf, oder man schaut sich mal std::string an und verwendet diesen