Zeichen an char* anhängen



  • wie waere es mit:

    void AddString(char *mainStr, char *secStr)
    {
       int len1 = strlen(mainStr);
       int len2 = strlen(secStr);
       char *temp = new char[len1 + len2 + 1];
       memcpy(temp,mainStr,len1);
       memcpy(temp + len1,secStr,len2);
       temp + len1 + len2 = '\0';
       delete[] mainStr;
       mainStr = temp;
    }
    
    char *str = "Meep";
    char *tmpString = " Meep";
    AddString(c,tmpString); // Inhalt von c ist nen "Meep Meep"
    

    fallse ich nen bloedsinn verzapft habe, bidde korrigieren. hab das nur mal aus dem stegreif zusammengebastelt.

    Meep Meep



  • Könntest du bitte solche Ausdrücke wie 'deprecated' unterlassen? Sags doch einfach auf Deutsch.



  • würde ich nicht... denn solche ausdrücke muss jeder programmierer kennen, da sie zu häufig in der einschlägigen literatur vorkommen.
    und englisch ist -zumindest in grundzügen- pflicht.



  • Ich hab ein ganz ähnliches Problem, vielleicht kann mir da jemand helfen:

    ich muss mir auch eine Zeichenkette zusammenbasteln, aktuell mache ich das so:

    ostringstream text1, text2, text3;
    
    text1 << "Frame-Rate: " << Game::frameRate;
    

    mit text1.str().c_str() hab ich bisher immer meinen const char* bekommen, aber jetzt brauche ich ein const TCHAR*.
    _T(text1.str().c_str()) funktioniert auch nicht, ich habe da irgendwie ein Verständniss Problem, weil ich den Komfort von Java-Strings gewohnt bin ;((

    Ist TCHAR eigentlich ein Unicode-Zeichen?



  • TCHAR ist denke ich mal ein Makro aus der Winapi das mal char oder wchar_t sein kann, wie du ein char* nach wchar_t convertierst findes du in der C++ FAQ



  • ABCDEF schrieb:

    Danke für die Antwort! Ich benutze keine Strings, da mein Projekt nicht größer als 50KB werden darf. Und mit Strings und IOStream komme ich auf 1MB. Gibt es keine Möglichkeit den Speicherplatz von "char*" zuerweitern ohne den Inhalt zu verlieren?

    1MB?! Wie denn bitte das? Hast du auch die Compiler-Optimierungen aktiviert (z.B. bei VC++ auf Release statt Debug gestellt)?
    Kann mir nicht vorstellen, daß <iostream> deine .exe derart aufbläht...



  • Gerard schrieb:

    TCHAR ist denke ich mal ein Makro aus der Winapi das mal char oder wchar_t sein kann, wie du ein char* nach wchar_t convertierst findes du in der C++ FAQ

    Ja, damit kann man offenbar ganz gut nen const char* konvertieren. Aber das ist mir für meinen Fall echt zu aufwändig. Ich brauch das überall im Programm. Gibt es keine String/StringStream - Klasse, die gleich mit wchar_t arbeitet?
    Ich habs mal damit probiert,

    typedef basic_stringstream<wchar_t> wstringstream;
    

    aber das funktioniert dann mit .str().c_str() auch nicht.



  • Hier hab ich ne überraschend einfache Lösung - aber ist die Performancemäßig nicht ziemlich am Boden?

    ostringstream text1;
    text1 << "Frame-Rate: " << Game::frameRate;
    NormalFont.DrawText(31.0f, 21.0f, 0xFFD0D0D0, (TCHAR)(text1.str().c_str())*, NULL);



  • Optimizer schrieb:

    Hier hab ich ne überraschend einfache Lösung - aber ist die Performancemäßig nicht ziemlich am Boden?

    ostringstream text1;
    text1 << "Frame-Rate: " << Game::frameRate;
    NormalFont.DrawText(31.0f, 21.0f, 0xFFD0D0D0, (TCHAR)(text1.str().c_str())*, NULL);

    das geht nur solange gut, solange TCHAR == char ist
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_generic.2d.text_mappings_in_tchar..h.asp

    und selbst dan castets du ein const weg

    Optimizer schrieb:

    Ja, damit kann man offenbar ganz gut nen const char* konvertieren. Aber das ist mir für meinen Fall echt zu aufwändig. Ich brauch das überall im Programm. Gibt es keine String/StringStream - Klasse, die gleich mit wchar_t arbeitet?
    Ich habs mal damit probiert,

    typedef basic_stringstream<wchar_t> wstringstream;
    

    aber das funktioniert dann mit .str().c_str() auch nicht.

    wstingstream gibt es schon in der stl.
    wozu benutzt du unicode im programm wenn du so wieso "überall" wieder char brauchst?
    brauchs du eigentlich ein const char * oder blos ein const wchar_t * ?



  • Ich brauch ein const TCHAR* und laut typedef ist das ein wchar_t.
    Und ich würde sowieso gern überall Unicode benutzen. Meine "einfache" Lösung verschluckt alle Umlaute. ;((
    Ich schau mir das aus der MSDN mal an...



  • Hey, kann man eigenltich ein #define schreiben, dass "Text" automatisch zu _T("Text") wird im Sourcecode? Wäre weniger umständlich, als das von Hand zu machen 😃

    Und was liefert mir eigentlich wstringstream::str()::c_str() bei
    #define _UNICODE
    zurück? Immer noch char* ? Wenn ja, wie krieg ich wchar_t*?
    Sonst funktioniert schon alles 🙂


Anmelden zum Antworten