char* verbinden mit char*



  • Hallo, wie kann ich 2 variablen vom typ char* verbinden? -> Garnich! ?!?
    wie würdet ihr folgendes problem lösen:

    xyzfunktion(char* Datei)
    

    Mit string währe es ja kein problem... aber die funktion erwartet eben char*

    z.B.

    char *path = "c:\\blub";
    char *datei = "huhu.txt";
    xyzfunktion(path+"\\"+datei); // geht natürlich nicht. aber wie macht man sowas?
    


  • std::strcat()



  • char *path = "c:\\blub";
    char *datei = "huhu.txt";
    xyzfunktion(path+"\\"+datei); // geht natürlich nicht. aber wie macht man sowas?
    
    char *filename = new char[strlen(path) + 1 + strlen(datei) + 1];
    strcpy(filename, path);
    strcat(filename, "\\");
    strcat(filename, datei);
    xyzfunktion(filename);
    delete[] filename;
    

    Das ist noch nicht maximal performant, aber es funktioniert und reicht für deinen Zweck. Als Übung kannst du noch den «Schlehmil» entfernen 🙂



  • MeisterMichi schrieb:

    Mit string währe es ja kein problem... aber die funktion erwartet eben char*

    und, warum dann keinen std::string nehmen?

    string str1 = "c:\\blub";
    string str2 = "\\";
    string str3 = "huhu.txt";
    string str4 = str1 + str2 + str3;
    
    xyzfunktion(str4.c_str());
    


  • xyzfunktion(path+"\\"+datei); // geht natürlich nicht. aber wie macht man sowas?
    
    xyzfunktion(string(path)+"\\"+datei); // geht natürlich. denn so macht man sowas!
    


  • hay, das sind ja gleich 4 antworten auf einmal 😃
    danke euch
    damit kann ich arbeiten



  • Ich würde dir allerdings strncpy/strncat empfehlen, da es sicherer ist. Oder noch besser: snprintf.



  • Oh, Fehler in meiner Antwort:

    xyzfunktion((string(path)+"\\"+datei).c_str()); // geht natürlich. denn so macht man sowas!
    

    und das ist mindestens genauso sicher, wie strncpy und Konsorten.



  • Ja, das würde ich sogar vorziehen. Aber ich weiss ja nicht, ob er string überhaupt benutzen darf. Außerdem meinte ich auch eher strncpy/strncat statt strcpy/strcat.



  • Dass die n-Funktionen sicherer sind ist auch nur ein Allgemeinplatz.



  • CarstenJ schrieb:

    Ja, das würde ich sogar vorziehen. Aber ich weiss ja nicht, ob er string überhaupt benutzen darf.

    Warum soll er string nicht benutzen dürfen?



  • Bashar schrieb:

    Dass die n-Funktionen sicherer sind ist auch nur ein Allgemeinplatz.

    Hä?

    Jover schrieb:

    Warum soll er string nicht benutzen dürfen?

    Woher soll ich das wissen?



  • CarstenJ schrieb:

    Bashar schrieb:

    Dass die n-Funktionen sicherer sind ist auch nur ein Allgemeinplatz.

    Hä?

    Die n Varianten können Sinnvoll sein - aber um ehrlich zu sein, ich habe sie fast nie verwendet. Weil ich einfach immer weiss wie groß meine strings sind - und wenn nicht, kann ich mit strlen() nachsehen 😉



  • Ich würde dir allerdings strncpy/strncat empfehlen, da es sicherer ist. Oder noch besser: snprintf.
    

    Seit Wann ist eine C-Funktion sicherer als eine string-Methode?

    MfG MAV



  • Seit Wann ist eine C-Funktion sicherer als eine string-Methode?

    Lol..ist ja mal wieder nen geiler Thread. Ich würde dir empfehlen, vorher mal alles zu lesen und zu verarbeiten, statt einfach Irgendwas zu posten.



  • CarstenJ schrieb:

    Hä?

    Nur so dahergesagt, weil es im Allgemeinen mit den herkömmlichen Funktionen mehr Sicherheitsprobleme gibt. Das heißt ja nicht, dass man automatisch sicherer wird, wenn man die n-Funktionen verwendet. Schon gar nicht hier in diesem Beispiel.


Log in to reply