zwei char* pointer zu einem char* pointer zusammenfügen



  • Hallo,

    die Funktion COpenCVImageCapture capture erwartet für left_image_name und right_image_name den vollständigen pfad des bildes. In left_image_name bzw. right_image_name steht aber nur left010.jpg bzw. right010.jpg.
    Wie kann ich nun die beiden zeiger zu einem zeiger zusammenfügen, sodass man der Funktion COpenCVImageCapture capture den kompletten Pfad übergeben kann ?
    Vielen Dank für eure Hilfe!

    char* pfad;
         char* left_image_name; // enthält den Name des Bildes, z.B. left010.jpg
    
    	int Run()
    	{
    
    pfad="C:\\Users\\XXX\\Desktop\\Codes_for_test\\3D_Application\\StereoImages\\";
    
    COpenCVImageCapture capture(left_image_name, right_image_name); 
    .........
    ...........
    
    }
    


  • Falsches Forum. Hier ist C++/CLI, eine .NET Sprache.

    Zu deinem Problem:
    Benutze std::string.

    #include <string>
    
    void f()
    {
       std::string left = "Blabla";
       std::string right = "Blabla";
       std::string path = left + right;
       COpenCVImageCapture capture(path.c_str(), ...);
    }
    


  • Danke für die schnelle Antwort
    das Porblem ist, dass left_image_name im programm als pointer definiert wurde und noch an weiteren Stellen als pointer benutzt wird....



  • starter88 schrieb:

    Danke für die schnelle Antwort
    das Porblem ist, dass left_image_name im programm als pointer definiert wurde und noch an weiteren Stellen als pointer benutzt wird....

    Dann benutze dort auch left_image_name.c_str()

    Edit:
    Und natürlich können left und right auch char* sein. Etwa so:

    const char* left = "asdf";
    const char* right = "yxcv";
    
    std::string path = std::string(left) + std::string(right);
    
    // oder
    // include <sstream>
    std::ostringstream stream;
    stream << left << right;
    std::string path = stream.str();
    


  • das programm bindet viele librarys wie IVT und OpenCV ein.... ich möchte den Source Code geren nur an diese Stelle anpassen.... Geht es nicht über die pointer-Zusammenfassung ?



  • starter88 schrieb:

    das programm bindet viele librarys wie IVT und OpenCV ein.... ich möchte den Source Code geren nur an diese Stelle anpassen.... Geht es nicht über die pointer-Zusammenfassung ?

    Es geht schon, aber dann musst du selbst wissen, was du tust. Du programmierst dann C und musst die Speicherverwaltung übernehmen und diese hässlichen C-String Funktionen benutzen.

    Wenn du das möchtest, kannst du mit strcat arbeiten. Aber wie gesagt, dann musst du dich selbst um den Speicher und alles kümmern.

    MfG



  • hallo,

    danke für den hinweis.... das mit den strings funktioniert nicht, da die Funktion COpenCVImageCapture capture(x, y) als x und y pointer erwarten. Dies Funktion wurde in der IVT geschrieben.



  • starter88 schrieb:

    das mit den strings funktioniert nicht, da die Funktion COpenCVImageCapture capture(x, y) als x und y pointer erwarten.

    std::string::c_str() !!!



  • sorry ich stehe gerade auf dem Schlauch. Wie funktioniert das mit c_str() ? Das funktioniert so nicht.. danke schon mal...

    char* pfad;
    char* left_image_name; // z.B. left009.jpg
    char* right_image_name; // right 009.jpg
    
    	int Run()
    	{
    
    	 pfad="C:\\Users\\XXX\\Desktop\\Codes_for_test\\3D_Application\\StereoImages\\";
    
    std::string endgueltig = pfad.c_str()+left_image_name.c_str();
    std::string endgueltig1 = pfad.c_str()+right_image_name.c_str();
    
    COpenCVImageCapture capture(endgueltig, endgueltig1);
    

    Folgendes habe ich auch noch probiert: Dann kommt allerdings beim Erstellen die Fehlermeldung: error C2440: 'Initialisierung': 'const char *' kann nicht in 'char *' konvertiert werden

    std::string l=left_image_name;
    std::string r=right_image_name;
    
    std::string endgueltig =l+pfad;
     char* endgueltigzeiger = endgueltig.c_str();
    


  • Korrigierte Fassung:

    char* pfad;
    char* left_image_name; // z.B. left009.jpg
    char* right_image_name; // right 009.jpg
    
    // ...	
    	 pfad="C:\\Users\\XXX\\Desktop\\Codes_for_test\\3D_Application\\StereoImages\\";
    
    std::string endgueltig = std::string(pfad)+left_image_name;
    std::string endgueltig1 = std::string(pfad)+right_image_name;
    
    COpenCVImageCapture capture(endgueltig.c_str(), endgueltig1.c_str());
    


  • das program lädt nun die bilder für die berechnungne...das schein zu funktionieren, vielen Dank schon mal für die Hilfe 🙂 ich habe aber noch eine Verständnisfrage: Warum nimmt man bei left_image_name bzw. right_image_name nicht std::string ?!?!



  • starter88 schrieb:

    ich habe aber noch eine Verständnisfrage: Warum nimmt man bei left_image_name bzw. right_image_name nicht std::string ?!?!

    Ich würde da auch std::string nehmen. Es gibt keinen Grund es nicht zu tun.

    EDIT
    Oder eher so: Solange es keien guten Grund gibt nicht std::string einzusetzen, würde ich es tun. Die Frage nach den guten Gründen wird von unterschiedlichen Leuten unterschiedlich beantwortet. Aber als Default würde ich auf jedenfall die Klassen der Standard Library benutzen.


Log in to reply