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.


Anmelden zum Antworten