in CString steht nur einer statt 3 Buchstaben



  • Wenn du 2 Strings aneinanderfügen willst benutzt + oder +=



  • Benutz' doch die CString-eigene Format()-Methode dafür (die arbeitet sogar mit den selben Formatkennungen wie printf())



  • Also Leute, belese mich gerade über CFile, denn das kannte ich noch gar nicht. Bin ich wohl immer irgendwie drum rum gelaufen. Aber damit ist es dann nicht ganz getan. Ich hab sprintf nämlich genommen, weil ich damit aus allen Krams den ich zusammenfügen muss, zusammenfügen konnte. Bsp.: "Stefan ist 20 Jahre alt": sprintf(text, "%s ist %i Jahre alt", name, alter);
    So etwas brauche ich also. Mit den + Operatoren (mit denen man Strings zusammenfügen kann) ist es also da nicht so ganz getan !



  • wenn du CStrings zusammen bringen willst nimm +, wenn du Zahlen umwandeln willst nimm CString::Format



  • Für Textdateien bietet sich dann auch noch CStdioFile an. 🙂



  • Lies mal mit 😉

    CStoll schrieb:

    Benutz' doch die CString-eigene Format()-Methode dafür (die arbeitet sogar mit den selben Formatkennungen wie printf())

    d.h. dein Beispiel könnte man auch schreiben als:

    CString name="Stefan";int alter=22;
    //...
    CString text;
    text.Format("%s ist %i Jahre alt", name, alter);
    


  • Jetzt hab ich auch mal ne Frage hier in die Runde:
    Aber kann ich denn str nach den folgenden Operationen noch problemfrei in eine txt-Datei schreiben ? ich denke CString ist nur zur Ausgabe auf Bildschirmen (--> "Visual")

    CString str = "Some Data";
    str.Format(_T("%s%d"), str, 123) );



  • CString ist eine Klasse zur String-Verwaltung in erster Linie. Wo man den String benutzt, ist Sache des Programmieres(also egal ob man es auf dem Bildschirm ausgibt oder in ne Datei schreibt)



  • richtig.

    Was würde ein String nutzen, der nur zur Ausgabe auf dem Bildschirm genutzt werden kann 😕



  • So, Leudde, da hab ich schon wieder den Salat. Gleiche Fehlermeldung, wie sonst auch, wenn ich diese str.Format-Zeugs benutzt habe.

    Folgenden Code hab ich nu:

    CString monat, text;
    int zahl; 
    ... 
    SYSTEMTIME ti; 
    GetLocalTime(&ti); 
    ... 
    if (ti.wMonth==11) { monat="Nov"; } 
    ... 
    text.Format("Monat:  %s  Zahl: %i", monat, zahl);    // zeile 231
    ...
    

    Und folgende Fehlermeldung dazu

    c:\dokumente und einstellungen\test\desktop\test\c++\test.cpp(231) : error C2664: 'void __cdecl CString::Format(const unsigned short *,...)' : cannot convert pa
    rameter 1 from 'char [242]' to 'const unsigned short *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast



  • ... also bei mir funktioniert es



  • mach mal "%d" anstatt "%i"



  • Das sieht so aus, als ob du für Unicode programmieren willst. In dem Fall mußt du dem Compiler mitteilen, daß dein Format-String in Unicode sein soll:

    text.Format(_T("Monat: %s Zahl: %i"), monat, zahl);
    

    Edit: Und vermutlich mußt du auch die Zuweisung zu monat in _T(...) einschließen.



  • Pellaeon schrieb:

    mach mal "%d" anstatt "%i"

    warum dezimal angeben wenn er nen int wert hat?
    bei mir funktioniert %i jedenfalls tadellos



  • Taelan schrieb:

    Pellaeon schrieb:

    mach mal "%d" anstatt "%i"

    warum dezimal angeben wenn er nen int wert hat?
    bei mir funktioniert %i jedenfalls tadellos

    *lol* sry ich kannte es nur mit %d für Integer-Werte



  • Dann fühle er sich hiermit gerügt
    Rüdiger wallte er seines Amtes



  • Mit %d kommt genau das gleiche. Das war eh nur ein Beispiel. Im richtigen Quellcode bei mir habe ich auch %d. hatte mich da vorhin nur verschrieben. Naja, vielleicht resultiert die Fehlermeldung auch aus irgendwelchen anederen Vordefintionen der Programmteile, die ich nicht geschrieben habe. Muss da nämlich nur was modifizieren.



  • @CToll: Ja, am _T lag die Fehlermeldung. Danke !!!
    Andere Sache nun bei CFile: Wie kann man da denn überprüfen ob die Datei neu angelegt werden muss oder schon existiert. fprintf() macht as ja bei dem Parameter "a" von ganz alleine. Gibts die Datei schon wird angehängt, gibts sie noch nicht, wird sie neu angelegt. Bei CFile muss ich abe exakt angeben, was ich will: anlegen ("modeCreate") oder eben reinschreiben ("modeWrite"). Kennt sich damit jemand aus ? Ich will nämlich etwas nur in eine Datei schreiben, wenn es sie noch nicht gibt und etwas anderes, wenn es sie schon gibt.



  • Ups.. "CStoll" meinte ich natürlich. Sorry !



  • Ich mache damit einen neuen Thread auf. Also hier bitte nicht mehr antworten !


Anmelden zum Antworten