Zero-Terminating bei CString *argh*



  • Hi all

    ich lese aus einem XML File einen Wert. z.B. VERSION = "1.05".

    Ich erhalte als Daten allerdings 5, anstatt die eigentlichen 4 Zeichen;

    CString sVal = getXMLValue(VERSION); // sVal hat die Länge 5 (also 1.05\0).
    

    Ich dachte immer, CString sei selbstterminierend (also 0 ist nicht nötig und wird auch von CString nicht akzeptiert...).
    Leider kann man die NULL scheinbar doch anfügen wie dieser Code zeigt.

    CString sVal = getXMLValue(VERSION);
    CString sNew = sVal + "hallo";
    

    <hallo> wird nicht angehängt. Ursache: sNew erhält alle 5 Zeichen von sVal und kann somit folglich nach der \0 keine weiteren Daten akzeptieren.

    Frage: Gibt es eine spez.-Funktion, welche das "zusätzliche '\0' entfernt oder bin ich verdammt, das jeweils so zu machen:

    CString sVal = getXMLValue(VERSION);
    CString str;
    for(int i=0; i<sVal.GetLenth(); i++){
     if(sVal.GetAt(i)==0) return;
     str+=sVal.GetAt(i);
    }
    
     // jetzt hat str den Wert "1.05" und nicht mehr "1.05\0"
    


  • hast du die Funktion getXMLValue selbst geschrieben? Dann ändere es da doch einfach um. :xmas2:



  • Paul_C. schrieb:

    hast du die Funktion getXMLValue selbst geschrieben? Dann ändere es da doch einfach um. :xmas2:

    Ne eben nicht 🤡



  • Denn normalerweise kannst du an einem CString-Objekt weitere Strings anhängen. Scheint also, dass die Funktion '\0' anhängt.
    Vielleicht kannst du auch strcat() verwenden. Oder gibt es nicht auch noch CString::Append() ?



  • Bist du dir wirklich sicher das das so ist?

    Ist CString s = "\0"; also ein Zeichen lang?



  • sicher?? schrieb:

    Bist du dir wirklich sicher das das so ist?

    Ist CString s = "\0"; also ein Zeichen lang?

    also nachdem die Ausgabe "(v1.05)" nie klappte und ich eigentlich keinen Fehler in meindem code sah:

    CString sVers = "(v" + sVal+ ")"; //gibt immer "(v1.05"
    

    guckte ich mittels Schlaufe, was drinnen war...

    for(int i=0; i<sVal.GetLenth(); i++){
     int x = (int) sVal.GetAt(i);
    }
    // x hat die Werte: 49, 46, 48, 53, 0
    //GetLenth() gibt 5 zurück, sollte aber eigentlich die 4 zurückgeben..
    

    So von dem her ja: ich bin sicher 😉

    Edit: vielleicht muss ich mal den Quellcode von dier XMLget() Methode organisieren. Ist doch einfach schrecklich so was!



  • Hast du den Quellcode von getXMLValue?


Anmelden zum Antworten