char in char* konvertieren
-
hallo,
ich habe folgendes problem:
char ch; char *ch2; ifstream mapfile; mapfile.open("maps/test2.map", ios::in); if (!mapfile.is_open()) {cout << "ERROR Could not open file.";} else { for (int i=0; i<5;i++) for (int j=0; j<5;j++){ mapfile.get (ch); ch2 = (char*) ch; <----------------------- map[i][j] = atoi(ch2); } cout << map[4][4]; mapfile.close();
ich will integers aus einer datei auslesen. dieses mache ich zeichenweise mit mapfile.get(). diese funktion schreibt in ein char.
atoi braucht char* und kein char, um chars in integers umzuwandeln.
also konvertiere ich in der zeile mit dem pfeil char in char*.map ist eine 5x5 integerfeld. deklariert mit "int map[5][5]"
kompilierfehler:In file included from main.c:12: includes/map.h: In member function `int Wall::setmap(char*)': includes/map.h:84: warning: cast to pointer from integer of different size ./compile: line 2: 2633 Segmentation fault ./glkk
glkk heisst die anwendung.
-
Wie wär's mit
atoi(&ch);
Auf was man für Ideen man kommen kann
-
Hallo,
dann lies doch einfach char* ein:
http://www.cppreference.com/cppio_details.html#get
Die get Funktion ist entsprechend überladen.
-
huch,
danke das ging ja flott.atoi(&ch);
das wars. danke von einem anfänger.
-
cala.vera schrieb:
atoi(&ch);
das wars. danke von einem anfänger.
Mit Sicherheit wars das nicht. Das dein Programm hier nicht abstürzt ist reiner Zufall. atoi erwartet als Parameter einen C-String (null-terminierte Zeichenfolge). &ch zeigt aber lediglich auf ein einzelnes Zeichen und hat rein zufällig den gleichen Typ wie ein C-String.
Wenn du's schon so umständlich machen willst, würde ich folgendes empfehlen:
char ch[2]; ch[1] = '\0';
In ch[0] liest du dann dein Zeichen ein, und rufst atoi(ch) bzw atoi(&ch[0]) auf.