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.