atoi ungültige Umwandlung von »char« in »const char*«
-
manni66 schrieb:
Manchmal hilft es, vor dem Denken den Verstand einzuschalten:
...manni66 schrieb:
Dann denk mal nach. Und wie gesagt, Verstand einschalten hilft.
Auf die dahinter liegende Abschätzigkeit wurde schon eingegangen ... interessant finde ich noch die Unreflektiert- und Unwissenheit, die aus diesem Beitrag sprechen (und die ich nicht selten im Internet finde):
Was soll "Verstand" (also z.B. Transfer und Verknüpfung bereits vorhandenen Wissens) bei einem bislang vollkommen unbekannten Themengebiet bringen?
Kommt man mit "Verstand" darauf, was wie Baseball funktioniert? Weiß ein Mathematikprofessor automatisch, welche Kraftstoffart ein bestimmtes Automodell braucht?Aber vielleicht sollte ich auch keine Trolle füttern...
Gruß,
Simon2.
-
Wikipedia sagt zu Verstand etwas anderes.
-
knivil schrieb:
Wikipedia sagt zu Verstand etwas anderes.

"Anders" als was?
-
Tade schrieb:
Hmm ok. so geht es:
#include <iostream> int main() { char arr[3]; arr[0] = '3'; arr[1] = '2'; arr[2] = '1'; char tmp; tmp = atoi(arr); }was mir jetzt aber nicht ganz so klar ist warum atoi() einen zeiger auf character erwartet und nicht einen einzelnen char über atoi(*arr)...
Das es bei dem Code nicht knallt, ist auch reine Glückssache.
wie bereits gesagt wurde, muss das letzte zeichen in dem String das Nullterminierungszeichen sein ('\0'). Sollte der Code funktionieren, liegt es daran, dass zufällig hinter dem array arr eine 0 im Speicher steht.Zu deiner Frage: Atoi erwartet einen Zeiger auf ein einzelnes zeichen (den Anfangsbuchstaben eines strings) und kann durch Inkrementieren der Adresse weitere Zeichen des Strings einlesen. Das macht die Funktion solange, bis die Funktion das Nullterminierungszeichen findet. Daher muss der String mit einer 0 enden. Hier noch ein richtiger Code:
char arr[4]; arr[0] = '3'; arr[1] = '2'; arr[2] = '1'; arr[3] = '\0'; int tmp; // Hier nehme ich int, falls die Werte größer sind tmp = atoi(arr);MfG, Jochen
-
Jochen S. schrieb:
...Sollte der Code funktionieren, liegt es daran, dass zufällig hinter dem array arr eine 0 im Speicher steht....
Wenn ich mich nicht täusche, reicht ein "non-digit" - insofern ist die Chance deutlich größer (theoretisch 246/256 = 96% pro Folgebyte ?)

Das ändert aber nichts daran, dass das ein Programmierfehler ist und man sowas tunlichst vermeiden sollte...Gruß,
Simon2.