Problem mit atoi
-
Hi Leute,
ich bin absoluter C++ Anfänger und bräuchte mal eure Hilfe:
char szTemp[10] = "";
....
iBla = atoi(szTemp[i]);
....Da kommt dann dieser Fehler raus:
Konvertierung des Parameters 1 von 'char' in 'const char *' nicht moeglichKann mir jemand helfen?
Viele Grüße
snoopey
-
Ich hab so das gefühl, das gleich jemand sagt in C++ gibts garkein atoi.
Verstehst du, was du machst, wenn du das [i] weg läst?
-
Hehe, davon habe ich nichts

Ich möchte ja nicht den ganzen String in ne Zahl umwandeln, sondern nur das i-te Zeichen.
Aebr danke für die Antwort.
Kannst noch helfen?
-
Hm in C++ gibts gar kein atoi...das ist C

Ok ich werd das Geheimnis trotzdem lüften...:

atoi erwartet als Argument einen C-String, also einen char-Vektor...wenn du jedoch einen Index alá '[i]' angibst, übergibst du der Funktion damit nur eine char-Variable.
Hoffe du weißt, das Vektoren nichts anderes als Zeiger sind...
Das ist also gleich bedeutend:char* szBuffer = "Hallo";mit
char szBuffer[] = "Hallo";Dazu vllt. noch:
char chZahl = '8'; // OK char chNee = '33'; // FEHLER char chAuchNit = "33"; // FEHLER char* pszOK = "33"; // OKPS: In C++ würde man das dann bspw. mit stringstreams lösen

-
atoi exisitiert in C++ schon, aber an sich nur aus compatiblitätsgründen mit C
vversuchs mal mit dem ausdruck szTemp[i]-'0'
-
CodeFinder schrieb:
Hoffe du weißt, das Vektoren nichts anderes als Zeiger sind...
Das ist also gleich bedeutend:char* szBuffer = "Hallo";mit
char szBuffer[] = "Hallo";nein. das hatten wir bereits vor kurzem durchgekaut.
-
camper schrieb:
nein. das hatten wir bereits vor kurzem durchgekaut.
LOL ?!, haben wir das...link ?
Was ist denn deiner Meinung nach der Unterschied ?

-
char* szBuffer = "Hallo";Man beachte den Speicher erst anzufordern (allokieren). In dem obigen Code wird einfach der folgende Speicher überschrieben. Häufig geht das sogar gut; das liegt an der Art wie der Computer den Speicher verwaltet. Aber genau derartige Fehler sind grund für viele schwer findbare Programmabstürze und undefiniertes Verhalten...
Wenn man
int *i;schreibt wird ja schließlich auch nicht der Speicher für eine Zahl angefordert sondern nur der Speicher um eine Addresse zu verwalten - exakt so wie oben.
schreibt man hingegen
char v[] = "Kein langweiliger Standardspruch!\0";so wird der Speicher angefordert.
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-149745-and-highlight-is-.html
wobei ich mich in einer hinsicht korrigieren muss; es gibt einen fall, in dem arrays als rvalues auftreten (das macht den rest meines beitrages aber nicht ungültig), nähmlich http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#450
-
Ok, Ok, Ok, habt Recht...naja wenn ich ehrlich bin hab ich mir darüber auch noch nicht sehr viele Gedanken gemacht...
Da ich entweder gleich std::strings nehme oder C-Strings immmer mit '[]' definiere... :p ok tja dann mal Sorry 
-
Ich danke euch, jetzt funktionierts wunderbar, THX.