Anfängerfrage: dynamisches char array



  • HI @ all!

    Bin neu hier und genauso neu in der C++ Welt.

    Bin auf ein Problem gestoßen, das ich nicht verstehe.
    Hier mal der Code:

    void ArrayTest() {
    
    	char* mystring = new char[10];
    
    	mystring = "ABC\0";
    
    	cout << mystring[0] << endl;
    
    	//Fehler
    	mystring[0] = 97;
    
    	cout << mystring;
    }
    

    Alles funktioniert solange ich nicht die Zeile mystring[0] = 97 aufrufe. Nehme ich die Zeile mystring = "ABC\0"; raus dann geht alles.

    Was passiert hier - eigentlich dürfte doch gar nix neu zugewiesen werden ?

    Für ein wenig Hilfe wär ich sehr dankbar...



  • Hallo

    du kannst an einen char* nicht so einfach ein String-Literal übergeben.
    Dazu must du die Funktion strncpy benutzen.

    bis bald
    akari



  • void ArrayTest()
    {
        //Mit new wird ein Speicherbereich reserviert
        //und der Zeiger darauf "mystring" zugewiesen.
        char* mystring = new char[10];
    
        //Die Literalkonstante "ABC\0" belegt Speicher im READ-ONLY Bereich
        //und der Zeiger darauf "mystring" zugewiesen. 
        //Die Position des zuvor mit new reservierten Speichers ist dem Programm dann nicht mehr bekannt.    
        mystring = "ABC\0";
        //Ab hier ist es nicht mehr möglich den mit new reservierten Speicher mit delete freizugeben,
        //weil "mystring" plötzlich auf einen READ-ONLY Bereich zeigt, in dem sich 5 chars befinden:
        //'A', 'B', 'C', '\0', '\0'
        //Die Literalkonstante "ABC" würde den 4 chars 'A', 'B', 'C' und '\0' entsprechen.
    
        cout << mystring[0] << endl;
    
        //Fehler,
        //weil versucht wird in einem READ-ONLY Bereich zu schreiben.
        mystring[0] = 97;
    
        cout << mystring;
    }
    


  • Oder benutz in C++ doch gleich std::string, ist doch viel einfacher:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string myString = "ABC";
        cout << myString << endl;
        myString[0] = 97;
        cout << myString << endl;
    }
    

    mfg.



  • Vielen Dank für eure Antworten

    @joomoo: Wie gesagt ich bin neu in C++ und bis jetzt habe ich noch keine bessere Variante gefunden eineb Integer Wert in einen String zu konvertieren als die Methode:
    sprintf - die allerdings ein char* array übergeben haben möchte.
    Mein Problem is jetzt noch das wenn ich das einlese und das char* array dann versuche mit string.copy(myarray,... zu kopieren, dann bleibt alles leer in der Ausgabe 😢



  • Hallo

    die bste Art der Typmwandlung findest du in der C++FAq, im Thread Einmal String und zurück.

    bis bald
    akari



  • Greenhorn2006 schrieb:

    Vielen Dank für eure Antworten

    @joomoo: Wie gesagt ich bin neu in C++ und bis jetzt habe ich noch keine bessere Variante gefunden eineb Integer Wert in einen String zu konvertieren als die Methode:
    sprintf - die allerdings ein char* array übergeben haben möchte.

    Das gibt's auch für strings, schau mal im FAQ vorbei.

    Mein Problem is jetzt noch das wenn ich das einlese und das char* array dann versuche mit string.copy(myarray,... zu kopieren, dann bleibt alles leer in der Ausgabe 😢

    Zeig mal den Code.

    mfg.



  • Werde es mal mit stringstream versuchen...danke für den Hinweis

    char* mystring = new char[10];
    
    	int a = 4;
        unsigned int size = sprintf(mystring,"%d",a);
    
    	string s;
    	s.copy(mystring,size,0);
    
    	cout << mystring << " " << size << endl;
    	cout << s << endl;
    

    habs auch mal mit size+1 probiert in der copy methode ...gleiches Problem...



  • Greenhorn2006 schrieb:

    Werde es mal mit stringstream versuchen...danke für den Hinweis

    char* mystring = new char[10];
    
    	int a = 4;
        unsigned int size = sprintf(mystring,"%d",a);
    
    	string s;
    	s.copy(mystring,size,0);
    
    	cout << mystring << " " << size << endl;
    	cout << s << endl;
    

    habs auch mal mit size+1 probiert in der copy methode ...gleiches Problem...

    copy ist für string nach char*, andersrum kannst du einfach = benutzen.

    mfg.


Anmelden zum Antworten