C++ Alternative zu sprintf()



  • groovemaster schrieb:

    Das Beispiel ist aber nicht ganz korrekt, da MessageBox (wie die meisten WinAPI Funktionen) TCHAR's handelt.

    und ein TCHAR ist idR ein char, weil man meistens nicht mit Unicode kompiliert, wiel man damit in C meistens nur probleme hat.

    aber wir wollen ja keine haare spalten, nicht?



  • Shade Of Mine schrieb:

    und ein TCHAR ist idR ein char

    Nein, ein TCHAR ist je nach Makrodefinition char oder wchar_t. Aber das weisst du ja selbst.
    Wenn man schon vorhat, lediglich auf narrow chars zu setzen, dann sollte man auch wenigstens MessageBoxA verwenden. Damit macht auch die Unicode Compilierung keine Probleme.



  • Danke für die Antworten, ich benute dann mal das hässliche

    stream.str().c_str()
    

    .9



  • Obwohl, das hier wäre doch eigendlich kürzer und sieht auch gleich besser aus, oder?

    string Text;
    Text = "Fo ist " + fo + "Bo ist " + bo;
    MessageBox(NULL,(char)Text,"Wichtige Informartion",MB_OK | MB_ICONINFORMATION);
    


  • Stimmt, der Stringstream ist praktischer, so wie's oben steht funktioniert es gar nicht 🙄

    MfG RoaN;



  • (char)Text

    böse. wenn std::string einen cast nach char*(nicht char, char ist ein einzelnen zeichen) unterstützen würde, so würde das sogar implizit geschehen, da das aber nicht der fall ist(dafür gibt es extra c_str()), macht dein code absoluten müll, vorallem da sring intern je nach implementierung nur pointer auf einen mit new angelegten speicherbereich hat, und somit eine konvertierung nach (char*) nur den speicherplatz dieser pointer und nicht den text betrifft.



  • War mir auch aufgefallen, habs dann auch mit .c_str() gemacht, doch das fand ich ja gerade so hässlich. 😃
    Jetzt hab ich mich an .c_str() gewöhnt und find es nicht mehr so schlimm
    - und da das mit dem + GetMHZ() auch nicht funktioniert nehm ich wie gesagt lieber den stringstream.

    Vielen Dank für euere Hilfe.

    MfG RoaN;



  • wenn du viel mit C APIs arbeitest ist std::vector<char> wohl besser als std::string geeignet.



  • Ne, ich installiere gerade schon GTKmm,
    mich hatte diese Aussage: "Es gibt zu sprintf keine ..." aus, glaub es war ein Scherfgrn, diesem Buch nur stutzig gemacht.
    Das mit der MessageBox war ein Beispiel-Teil aus diesem Buch.

    MfG RoaN;



  • roan312 schrieb:

    mich hatte diese Aussage: "Es gibt zu sprintf keine ..." aus, glaub es war ein Scherfgrn, diesem Buch nur stutzig gemacht.

    oben genannte stringstreams sind ja auch keine echte alternative. Die gibt es in C++ auch nicht. Boost wurde ja schon genannt.


Anmelden zum Antworten