Einen String mit swprintf ausgeben



  • Hallo,
    ich habe Schwierigkeiten einen String mit swprintf auszugeben. Ich habe folgendes probiert:

    string name = "aeg";
    wstring wname(name.begin(), name.end());
    
    TCHAR sizeStr[300];
    swprintf_s(sizeStr, TEXT("Name: %s"), wname);
    TextOut(hdc, 10, 410, sizeStr, _tcsclen(sizeStr));
    

    Nur leider kommt bei der Ausgabe immer nur Kauderwelsch raus. Irgendwas mache ich falsch….



  • wname ist kein %s.



  • @iova sagte in Einen String mit swprintf ausgeben:

    Irgendwas mache ich falsch….

    Du hast einfach die _s Funktion genommen, ohne dir die Referenz dazu durchzulesen.

    Das ist kein 1:1 Ersatz.



  • Hmm, aber wenn ich einen normalen string nehme funktioniert es auch nicht. Was ist denn die Referenz zu %s in swprintf ?


  • Mod

    @iova sagte in Einen String mit swprintf ausgeben:

    Hmm, aber wenn ich einen normalen string nehme funktioniert es auch nicht. Was ist denn die Referenz zu %s in swprintf ?

    Immer noch %s. Aber: Du hast immer noch nicht die Referenz zu swprintf_s durchgelesen! Die Funktion hat einfach ganz andere Argumente als swprintf.



  • string name = "";
    name = dirSystem[(i + j * horizontal)]->getSubDirs(); //generiert Namensstring
    wstring wname(name.begin(), name.end());
    const wchar_t* wchar = wname.c_str();
    
    TCHAR sizeStr[300];
    swprintf_s(sizeStr, TEXT("Name: %s"), wchar);
    TextOut(hdc, 10, 410, sizeStr, _tcsclen(sizeStr));
    

    Ah, jetzt hab ich's verstanden. Jetzt ist nur noch das Problem, dass der String zu kurz ist und nur die letzen 4 Zeichen anzeigt.



  • @iova sagte in Einen String mit swprintf ausgeben:

    Jetzt ist nur noch das Problem, dass der String zu kurz ist und nur die letzen 4 Zeichen anzeigt.

    @seppj sagte in Einen String mit swprintf ausgeben:

    Aber: Du hast immer noch nicht die Referenz zu swprintf_s durchgelesen! Die Funktion hat einfach ganz andere Argumente als swprintf.

    Microsoft hat die Doku im MSDN abgelegt.
    Suche nach "MSDN swprintf_s" oder auch printf_s und schau nach was da für den Formatspecifier %s steht. Nur den Zeiger auf den String reicht da nicht aus.



  • Du vermischst da aber auch alles, char, wchar, TCHAR...
    Warum nicht einfach:

    string name = "aeg";
    string txt = "Name: "+name;
    TextOutA(hdc, 10, 410, txt.c_str(), txt.length());
    

    Wenn du TCHARs (also für beide Konfigurationen) verwenden möchtest, definiere einen string<TCHAR>:

    typedef std::basic_string<TCHAR> tstring;
    
    tstring name = TEXT("aeg");
    tstring txt = TEXT("Name: ")+name;
    TextOut(hdc, 10, 410, txt.c_str(), txt.length());
    

Log in to reply