Rückgabewert einer Funktion in "char"



  • Ich hänge hier fest. Er gibt den Wert nicht zurück....

    //global
    char *InfoBack;
    
    //WinMain
    InfoBack = TextAusgeben();
    TextOut(hDC, 10, 10, InfoBack, strlen(InfoBack));
    
    //------------------------------------------------------
    char* TextAusgeben()
    {
    	char Info[100];
    	char Zahl[10];
    	strcpy_s(Info, " Art = ");
    	_itoa_s(Art, Zahl, 10);
    	strcat_s(Info, Zahl);
    	strcat_s(Info, "  TypName : ");
    	strcat_s(Info, TypName[Art]);             //TypName,Art global deklariert
    	strcat_s(Info, "     ");
    
    	return Info;
    }
    

    Sollte ich den globalen char InfoBack direkt in der Funktion verwenden
    statt den eigens deklarierten char Info[100] ??

    Oder rennt das Ganze etwas anders ab...

    Bitte um Hilfe... 😕



  • du bist noch nicht bereit für die windoof api. ma ganz fix ab ins n00b forum mit dir ➡



  • Danke für die Hilfe,
    damit kann ich was anfangen,
    so kann man was lernen... 👎



  • Lass dich nicht ärgern 😉

    Du kannst keine Adresse einer lokalen Variable zurückgeben. "Info" ist aber eine lokale Variable in der Funktion "TextAusgeben" und wird am Ende der Funktion zerstört, deshalb ist dann auch der Zeiger darauf kaputt.



  • WinAPI-Funktionen machen sowas meistens anders, da sähe TextAusgeben() so aus:

    // *NurPseudoCode*
    void TextAusgeben(char* txt, int len)
    {
       char Info[100];
       // ...
    
       // Hier Info mit strcpy() oder so nach txt kopieren
    }
    
    // Aufruf dann:
    char InfoBack[200];
    
    TextAusgeben(InfoBack, 200);
    TextOut(...,InfoBack,...);
    

    Oder schau dir mal malloc()/free() oder bei C++ "new"/"delete" an.



  • Ahaaaaa, ich schick einfach die Speicheradresse also den Pointer der darauf
    verweist mit in die Funktion und kann von dort aus praktisch darauf zugreifen..
    den Wert ändern...

    Manchmal rennt man einfach um die Antwort herum.... 😃

    Vielen Dank an Euch !!!

    👍



  • orz


Anmelden zum Antworten