Newbie Problem bei String
-
Bei
#include <iostream.h> #include <string.h> void main() { char *pszChar1 ="Luzaprak"; cout <<"pszChar1 "<<pszChar1<<"\n"; *(pszChar1+3)='i'; cout <<"pszChar1 "<<pszChar1<<"\n"; }
bekomme ich beim Kompilieren keinen Fehler aber beim Ausführen !!
Bei
#include <iostream.h> #include <string.h> void main() { char *pszChar1 =new char [20]; strcpy(pszChar1,"Luzaprak"); cout <<"pszChar1 "<<pszChar1<<"\n"; *(pszChar1+3)='i'; cout <<"pszChar1 "<<pszChar1<<"\n"; }
ist alles OK
Wo genau liegt der unterschied ???
-
Was passiert denn beim ausführen?
-
Die Anweisung in "0x00401058" verweist auf Speicher in "0x0042802f". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.
-
Es könnte sein das bei deiner ersten Varianten "Luzaprak" als Konstante angesehen wird und du deshalb nicht das Recht hast diese zu verändern. In der Varianten 2 wird von dir ja Speicher angefordert und dorthinein zuerst das "Luzaprak" kopiert und dann änderst du im angefordeten Speicher.
Hier wäre ich dankbar wenn einer der 'Gurus' sich dazu äußern könnte.
-
schon mal beim ersten probiert das & zu benutzen
cout <<"pszChar1 "<<&pszChar1<<"\n";
-
das Problem ist nicht die Ausgabe sondern der Schreibversuch
den 4. Char durch ein i zu ersetzten
-
tut mir leid der erste beitrag war nicht richtig, hab es danach ausprobiert und es geht nicht
-
Ich bin zwar kein Guru, aber wenn ich mich irre, darf man Stringliterale nie ändern, auch wenn man sie an "char*" binden kann, was nur aus Gründen der Abwärtskompatibilität (wie viel zu vieles in C++...) geht.
Und zum Lernen char* statt std::string zu benutzen ist ja in Ordnung, aber es heißt trotzdem
#include <iostream> #include <cstring> using namespace std;
-
int main(...)