char* an char* ranhängen



  • Ic3Hawk schrieb:

    time_t Zeitstempel;
         Zeitstempel = time(0);
    string a = "d:\\webcam";
    string b = ".jpg";
    string file = a + ctime(&Zeitstempel) + b;
    char *fname = c_str(file);
    capFileSaveDIB (hWndC,fname);
    

    38 D:\C++\cam\cam.h `c_str' undeclared (first use this function)

    c_str ist keine globale Funktion, sondern eine Methode von string (wenn du den Unterschied nicht kennst, solltest du zurückkehren zu den Grundlagen).

    Edit @pale dog: Und dieser Cast gehört zu den Sachen, die man NICHT machen sollte.



  • Hallo

    Ic3Hawk schrieb:

    time_t Zeitstempel;
         Zeitstempel = time(0);
    string a = "d:\\webcam";
    string b = ".jpg";
    string file = a + ctime(&Zeitstempel) + b;
    char *fname = c_str(file);
    capFileSaveDIB (hWndC,fname);
    

    38 D:\C++\cam\cam.h `c_str' undeclared (first use this function)

    hab string included mfg

    #include<string>
    
    std::string
    

    chrische



  • oder einen dritten char* erstellen, der so roß ist wie die beiden anderen zusammen und rüberkopieren...



  • pale dog schrieb:

    Ic3Hawk schrieb:

    char *fname = c_str(file);
    
    char *fname = (char*)file.c_str();
    

    🙂

    Ui, ganz ganz böse... Bei c_str() ist nicht garantiert das ein Zeiger auf den tatsächlichen Inhalt des std::basic_string Objekts zurückgegeben wird. Sowas führt zwangsläufig zu undefinierten Verhalten.



  • David_pb schrieb:

    Bei c_str() ist nicht garantiert das ein Zeiger auf den tatsächlichen Inhalt des std::basic_string Objekts zurückgegeben wird.

    was sonst, wenn's nicht klappt? null?



  • Es könnte eine Kopie des char-Arrays erzeugen und einen Pointer darauf zurückgeben. Der Standard verlangt nur, dass c_str() eine const char* zurückgibt, dessen Elemente gleich denen des Strings sind.
    siehe Standard 21.3.6 1



  • Braunstein schrieb:

    Es könnte eine Kopie des char-Arrays erzeugen und einen Pointer darauf zurückgeben. Der Standard verlangt nur, dass c_str() eine const char* zurückgibt, dessen Elemente gleich denen des Strings sind.

    naja, geht doch auch...



  • Und was bringts dir da rein zu schreiben?



  • David_pb schrieb:

    Und was bringts dir da rein zu schreiben?

    da will doch keiner reinschreiben. der OP möchte doch nur einen dateinamen zusammensetzen und braucht das ergebnis als char* ...
    🙂



  • Na in dem Fall reicht auch ein const char*. 😛



  • David_pb schrieb:

    Na in dem Fall reicht auch ein const char*. 😛

    ne, nicht wenn die funktionen einen 'normalen' char* haben will. 😉



  • Na in dem Fall muss davon ausgegangen werden das die Funktion irgendwas ändern will... Und das ist halt irgendwo falsch.

    Dann lieber sowas:

    char* str = &foo[ 0 ];
    

    Wobei das irgendwie auch unschön ist.



  • pale dog schrieb:

    David_pb schrieb:

    Na in dem Fall reicht auch ein const char*. 😛

    ne, nicht wenn die funktionen einen 'normalen' char* haben will. 😉

    Scheißegal, C-Casts in C++ stinken trotzdem.



  • pale dog schrieb:

    ne, nicht wenn die funktionen einen 'normalen' char* haben will. 😉

    Woher willst du wissen, ob hier ein char* gefragt ist?
    capFileSaveDIB ist sowieso ein Makro welches eine capFileSaveDIB-Message absetzt. Hier sollte auch ein const char* funktionieren.



  • Braunstein schrieb:

    pale dog schrieb:

    ne, nicht wenn die funktionen einen 'normalen' char* haben will. 😉

    Woher willst du wissen, ob hier ein char* gefragt ist?

    der OP hat in seinem ersten posting die funktion mit einem char* gefüttert.
    🙂


Anmelden zum Antworten