Warum funktioniert das nicht korrekt?



  • Hallo!

    Ich begreife das nicht! Ich wollte lediglich in einer Funktion Pfad und Dateiname zusammenbauen lassen, damit ich das nicht immer aufs neue muss, aber irgendwie Funktioniert das nicht so, wie ich es mir vorgestellt habe.
    In Zeile 19 zeigt er mir die korrekt zusammengebaute Zeichenfolge an,
    in Zeile 20 hingegen nur Mist. Ich vermute mal dass, das die Zeigeradresse ist.

    Wenn ich in ppp direkt eine Zeichenkette speicher, funktioniert alles.

    Hier ein Auszug mit dem wesentlichen...(habe nicht den ganzen Code abgedruckt, somit fehlt hier z.B. die Funktion Load_Level_From_File, die aber nichts zur Lösung meines Problemes beitragen dürfte!?):

    const char* Pfad="D:\\MyProjects\\";
    
    bool Load_Level_From_File(char *);
    
    char *FileName(char* f)
    {
    	char *rg;
    	char nf[255];
    	strcpy_s (nf,Pfad);
    	strcat_s (nf,f);
    	rg=nf;
    	return  rg;
    }
    
    int main(int argc,char *argv[])
    {
    	char *ppp;
    	ppp = FileName("level.dat");
            MessageBoxA (NULL, FileName("level.dat"), "", 0);
    	if (Load_Level_From_File(ppp)==false) MessageBoxA(NULL, ppp, "Abort",0);
       return 0;
    }
    

    Danke für eure (zahlreiche) Hilfe



  • Du gibst hier die Adresse eines lokalen Arrays zurück. Das Array, auf das diese Adresse zeigt, existiert in Folge also garnicht mehr. Damit greifst Du auf Speicherleichen zu.

    Nimm std::string.



  • Vergiss jetzt erstmal den Umgang mit 'rohen Zeigern' insbesondere 'char*'.
    Lerne, std::string zu benutzen. Jetzt! Nicht später!

    Fertig? Dann lies weiter!

    const std::string Pfad("D:\\MyProjects\\");
    
    std::string Filename(const std::string& f)
    {
       return Pfad + f;
    }
    
    int main()
    {
        std::string ppp = Filename("level.dat");
        MessageBoxA (NULL, ppp.c_str(), "", 0);
        if (Load_Level_From_File(ppp.c_str())==false) 
          MessageBoxA(NULL, ppp.c_str(), "Abort",0);
    
        return 0;
    }
    

Anmelden zum Antworten