char* an char* ranhängen
-
Und wo ist da das Hindernis? std::string kann dir im Notfall einen const char* auf seine Daten liefern (mittels 'c_str()').
-
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
-
capFileSaveDIB (hWndC,file.c_str());
-
Ic3Hawk schrieb:
char *fname = c_str(file);char *fname = (char*)file.c_str();
-
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::stringchrische
-
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.
