SetAt



  • vermutlich erwartet die funktion als zweiten parameter ein const char * o.ae..
    und wenn man dort einen int wie zb. 5 uebergibt was die funktion ja fuer die adresse des strings haelt, koennte das wie in deinem beispiel zu nem absturz o.ae. kommen.



  • s ist vom Typ CString, wäre eigenlich was für MFC 😞



  • Cpt.Tanga schrieb:

    und wenn man dort einen int wie zb. 5 uebergibt was die funktion ja fuer die adresse des strings haelt, koennte das wie in deinem beispiel zu nem absturz o.ae. kommen.

    Unwahrscheinlich, da int nicht implizit in const char* umgewandelt werden kann. Zudem verlangt SetAt als zweiten Parameter ein TCHAR.

    Ich tippe einfach mal darauf, dass der String keine 2 Zeichen lang ist.

    ⚠

    SetAt will not enlarge the string if the index exceeds the bounds of the existing string.



  • SideWinder schrieb:

    Beachte 5 != '5' != "5"

    Du meinst (5 != '5') && (5 != "5") 😉



  • groovemaster schrieb:

    Cpt.Tanga schrieb:

    und wenn man dort einen int wie zb. 5 uebergibt was die funktion ja fuer die adresse des strings haelt, koennte das wie in deinem beispiel zu nem absturz o.ae. kommen.

    Unwahrscheinlich, da int nicht implizit in const char* umgewandelt werden kann. Zudem verlangt SetAt als zweiten Parameter ein TCHAR.

    muss es auch nicht. es muss nur in einen pointer (der afaik einem unsigned long int entsprechen sollte) gecastet werden was ja kein problem darstellt(koennte ne warnung geben aber keinen error) ausser das der parameter halt auf die uebergebene adresse zeigt.
    das mit const char * war auch nur ne vermutung wusste ja (auch) nicht das es sich um CString handelt

    groovemaster schrieb:

    Ich tippe einfach mal darauf, dass der String keine 2 Zeichen lang ist.

    jop denk ich auch. vermutlich bei solch einem aufruf: s.SetAt(1,"5");



  • Cpt.Tanga schrieb:

    muss es auch nicht. es muss nur in einen pointer

    Egal was du für einen Zeiger hast, int kann trotzdem nicht implizit umgewandelt werden.

    Cpt.Tanga schrieb:

    der afaik einem unsigned long int entsprechen sollte

    Nein. Zeiger ist Zeiger und unsigned long ist unsigned long. Schau dir mal verschiedene Datenmodelle an, dann wirst du verstehen, dass unsigned long nicht nur logisch sondern auch praktisch was anderes ist. ZB LLP64.

    Cpt.Tanga schrieb:

    gecastet werden was ja kein problem darstellt

    Niemand hat von Casts gesprochen, zumal im Code auch keine vorhanden sind.



  • groovemaster schrieb:

    Niemand hat von Casts gesprochen, zumal im Code auch keine vorhanden sind.

    ist aber nunmal so das ein uebergebenes int argument dort wo ein pointer erwartet wird einfach in jenen umgewandelt wird.

    groovemaster schrieb:

    Egal was du für einen Zeiger hast, int kann trotzdem nicht implizit umgewandelt werden.

    offensichtlich doch (bis auf ne warnung):

    void f(const char *p)
        {
        char ch=*p;
        };
    
    int main()
        {
        f(5);//int in den const char pointer ohne weitere probleme, allerdings: crash
        return 0;
        };
    


  • Cpt.Tanga schrieb:

    f(5);//int in den const char pointer ohne weitere probleme, allerdings: crash
    

    error C2664: 'f' : cannot convert parameter 1 from 'int' to 'const char *'
    Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

    Beschäftige dich erst noch etwas mit den Grundlagen und erzähl nicht solchen Unsinn! 😉



  • groovemaster schrieb:

    Cpt.Tanga schrieb:

    f(5);//int in den const char pointer ohne weitere probleme, allerdings: crash
    

    error C2664: 'f' : cannot convert parameter 1 from 'int' to 'const char *'
    Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

    Beschäftige dich erst noch etwas mit den Grundlagen und erzähl nicht solchen Unsinn! 😉

    hab es versehentlich mit .c statt .cpp dateien getestet, gut das sehe ich ein, aber: "Beschäftige dich erst noch etwas mit den Grundlagen und erzähl nicht solchen Unsinn" 😡 😡 😡 👎 👎 !!!!!



  • Cpt.Tanga schrieb:

    hab es versehentlich mit .c statt .cpp dateien getestet, gut das sehe ich ein, aber: "Beschäftige dich erst noch etwas mit den Grundlagen und erzähl nicht solchen Unsinn" 😡 😡 😡 👎 👎 !!!!!

    Was erwartest du denn? Ich hab's dir immerhin zweimal in netter Form gesagt. Wenn du aber trotzdem auf deinen falschen Behauptungen bestehst, dann darfst du dich nicht wundern, wenn jemand mal etwas drastischere Worte findet. Spätestens nach dem zweiten mal sollte auch dir aufgefallen sein, dass wir im C++ Forum sind. Also spiel nicht gleich die beleidigte Leberwurst, sondern lern aus Fehlern und mit Kritik umzugehen. 😉


Anmelden zum Antworten