char zuweisen und return, aber konvertierungsfehler
-
Hallo,
nebenbei solltest du M noch initialisieren, denn sonst steht da irgendwas drin, was du nicht willst. Außerdem hast du ein Speicherleck, wenn du den Speicher für tag nicht mit delete[] wieder freigibst.
-
..hmm, genau nach diesem Beispiel hab ich das gemacht, wo mein Fehler(im Aufruf?)
liegt weiss ich aber trotzdem nich...Denkanstoss?
P.S.: die Initialisierung von M is im Beispiel ein busschen verrutscht, aber da
und beim delete[] meckert er auch, aber daher kommt ja mein Fehler nich oder?Stew
-
case 1: strcpy(*tag,"MO");
Evtl. mal das Sternchen wegmachen?!
-
...verdammt, hab mir eingebildet das schon probiert zu haben, omg.
DANKE!! @alle
Stew
-
StewDent84 schrieb:
und beim delete[] meckert er auch, aber daher kommt ja mein Fehler nich oder?
Wo hast du das denn jetzt stehen?
-
...habs nachm return (kam mir selber komisch vor) und nach Funktionsaufruf probiert, weil muss ja erstma übergeben werden bevor ich löschen kann, oder lieg ich da falsch.
Stew
-
Also mal ganz doof gefragt:
Wieso machst du es nciht so:int foo(char* cString, int *pnLength, int nParameter) { if(cString==NULL||pnLength==NULL) return -1; switch(nParameter) { case 0: if(*pnLength<6) { *pnLength=6; return -1; } strcpy(cString,"Hallo"); *pnLength=6; return 0; case 1: if(*pnLength<3) { *pnLength=3; return -1; } strcpy(cString,"Hi"); *pnLength=3; return 0; default: if(*pnLength<5) { *pnLength=5; return -1; } strcpy(cString,"Ciao"); *pnLength=5; return 0; } }
Natürlich ungetestet
-
[quote="StewDent84"]Hi,
ich (und mein Programm) würde(n) gerne in einer Funktion, in der ein Wert z.B. x berechnet wird, je nach "case" von diesem x, einer anderen Variablen einen char- Wert zuweisen und diesen mit return übergeben.
Habe auch schon in etlichen anderen Beiträgen nach einer Lösung geschaut, aber so wirklich geholfen hat mir da nix
Beispiel:
.. char funktion(char x, char y) { char z[10]; x=y+1; ich kenne case Anweisungen nur wenn du sie mit break beendest switch(x) { case 1: z="Hallo" case 2: z="Knallo" case 3: z="Ballo" } return z; }
...habs schon mit Zeigern probiert und weiss ich was EGAL: hat alles nich geklappt und ich kriege immer diesen einen (inzwischen sehr deprimierenden) Fehler:
error C2440: '=' : 'char [3]' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatWäre echt dankbar wenn mir mal jemand nen Denkansatz geben könnte, oder mir sagt was ich falsch mache...
Danke schonmal,
Stew[/quote]
-
ja das ist ja auch klar:
du returnst ein char! ein char ist ein zeichen(byte) und kein string. Einen String returnen ist etwas schwiriger. Du musst der funktion einen char* parameter mitgeben, den du dann beschreibst.
-
.. ach und dazu kommt, dass du nach den anweisungen in case noch ; machen musst und breaken musst und dass du strings nicht mit = zuweisen kannst, weilö strings arrays sind - also:
switch(x) { case 1: strcpy(z,"Hallo"); break; case 2: strcpy(z,"Knallo"); break; case 3: strcpy(z,"Ballo"); break; }
sondern mit strcpy.
-
...danke auch Euch, das Problem ist inzwischen aber beinahe gelöst, danke nochmal den anderen
@miller: kann ich cString dann aber auch returnen, wenns ne int- Funktion ist wie bei Deinem Beispiel???
@alle mein "Problem" besteht jetze nur noch darin, delete[] an die richtige Stelle zu schreiben, so dass der durch new[] bereitgestellte Speicher wieder freigegeben wird..
Stew
-
StewDent84 schrieb:
@miller: kann ich cString dann aber auch returnen, wenns ne int- Funktion ist wie bei Deinem Beispiel???
ich bin verwirrt, hab doch hier gar nicht mitgepostet
welches beispiel meinst du ?
bin jetzt nicht so im problem drin, aber im prinzip kannst du alles zurückgeben was du willst
-
Hallo,
das delete[] rufst du nach dem Aufruf der Funktion aus:
... char *blah; blah = BerechneM(); cout << blah << endl; delete[] blah; ...
-
Darf man fragen, warum du dir mit C-Strings ins Knie schießt, anstatt std::string zu verwenden? Aufgabenstellung?