SetAt
-
Ich würde gerne mit der Methode SetAt eine Zahl hinzufügen, aber leider stürzt das Programm immer ab.
s.SetAt(pos, string) ;
s.SetAt(1, 5) ;
Also warum kann ich an Position 1 nicht die 5 als Zeichen setzen?
-
1. Wohin hinzufügen? Was ist s?
2. Wenn die Methode SetAt tatsächlich als 2. Parameter einen String will muss der Aufruf so aussehen:s.SetAt(1,"5");Das sollte aber bereits vom Compiler erkannt werden, das heißt es bleibt im Prinzip nur noch ein einzelnes Zeichen dann bitte so:
s.SetAt(1,'5');Beachte 5 != '5' != "5"
MfG SideWinder
-
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 handeltgroovemaster 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: crasherror 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 castBeschä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: crasherror 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 castBeschä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.
