char zuweisen und return, aber konvertierungsfehler



  • 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 Funktionsformat

    Wä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?


Anmelden zum Antworten