char -> Zeichen ersetzen
-
Hallo
Ich lern grad Grundlagen von C, stoss aber schon nach dem ersten abändern von "Hello World!" an meine Grenzen.
Irgendwie will das nicht gehn. Folgendes:int main() { char* term; term = "ABC"; cout << term << endl; term[0] = 'X'; //<--Hier stoppt das Prg. cout << term << endl; wait(); return 0; }
Gibt diesen Fehler in der VSC++2006
Unhandled exception at 0x004142a8 in HelloWorld2.exe: 0xC0000005: Access violation writing location 0x00417721.
Habe Dank dem Forum schon einiges gelernt, aber mit der Suche dazu nichts gefunden, Drum wär ich froh um Hilfe.
Danke im voraus.
-
term (ein pointer auf char) zeigt auf ne stringkonstante ("ABC") und deren speicher kannst du nicht aendern.
-
Ich hab doch gar kein const gesetzt?
Und wie könnte ich denn das Zeichen ändern?
-
stringkonstante heisst, dass die werte in read-only speicher liegen.
mit "const" hat das rein garnichts zu tun.
du willst ein array, keinen zeiger.
du willst ausserdem strcpy() und keine zuweisung, um die zeichen deiner stringkonstante in dein array zu bringen.
-
int main() { char term[100] = "ABC"; cout << term << endl; term[0] = 'X'; cout << term << endl; wait(); return 0; }
-
int main() { char term[1024]; strcpy( term, "ACAB" ); cout << term << endl; term[1] = 'X'; cout << term << endl; wait(); return 0; }
Danke das funktioniert jetzt, aber ich krieg nun ne Warnung:
...\main.cpp(21) : warning C4996: 'strcpy' was declared deprecated
..\string.h(73) : see declaration of 'strcpy'
Message: 'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'Muss ich das verstehn?
-
Danke Feigling, so gehts ja auch.
Aber wovor hast du Angst?Ok ich werd mal weiter pröbeln.
-
die warnung spuckt MS vc++ aus, weil MS sich da neue und nicht standard-konforme sachen ausdenkt, die du dir ruhig ansehen kannst, aber nicht musst.
-
hmm
also "deprecated" heisst laut LEO "abgelehnt/missbilligt".
also windows missbilligt es, weil da keine überprüfung des speichers stattfindet oder wieso genau? konnte dazu nichts finden in der onlinehilfe..wenn ich das ganze nun mit std:strings mache, ist es dann sicherer?
-
es bedeutet allgemein "missbilligt".
strcpy() und alle c string funktionen sind deprecated, weil c strings AN SICH unsicher sind. das wusste man glaub ich schon seit den anfaengen, hat sich aber mehr um die knappen CPU ressourcen sorgen gemacht als um die sicherheit. die damaligen programmierer wussten ausserdem noch, was sie taten und konnten mit c strings wunderbar umgehen. heutzutage, im zeitalter von php und visual basic, da muss man ja nicht mehr aufpassen, was man da programmiert. deswegen gibt MS solche meldungen aus.
-
Kann es sein, dass ich eine Missbilligung deinerseits gegenüber dem "modernen Kram" raushöre?
Dann hältst Du wohl auch nichts von std::strings...Also kann ich es mit strcpy machen, wenn ich ordentlich arbeite, und immer erst den Platz im Array abfrage, mit strlen()? (da hab ich dann schon die zweite Warnung
)
-
Noobia schrieb:
Dann hältst Du wohl auch nichts von std::strings...
Ich kenne zumindest keinen C-Compiler der was mit std::string anfangen kann
-
tja..ich hab schon lang befürchtet, dass ich im falschen Forum geposted hab.
Ich will nun aber mit guten alten Hausmittelchen C weitermachen.
Was würde denn noch alles "missbilligt" von meinem Code Stückchen?
-
cout -> printf
-
Danke
Ich glaub dann versuch ich mich doch mit C++.
Das cout << ist schon praktisch.@TactX: wegen deiner Signatur..*rotwerd* hast du das nachgeprüft
-
Noobia schrieb:
Ich glaub dann versuch ich mich doch mit C++.
Das cout << ist schon praktisch.Jo, mach das. C++ ist auch schön, viele Sachen sind da viel unproblematischer. Wobei printf() ebenfalls sehr praktisch ist.
Noobia schrieb:
@TactX: wegen deiner Signatur..*rotwerd* hast du das nachgeprüft
Ja, das Leben ist _wirklich_ hart
-
Noobia schrieb:
und immer erst den Platz im Array abfrage, mit strlen()?
nein, falsch. strlen() wird anders benutzt.
du solltest mit python programmierung weitermachen, wenn du noch garkeine programmiererfahrungen hast.
-
c.rackwitz schrieb:
Noobia schrieb:
und immer erst den Platz im Array abfrage, mit strlen()?
nein, falsch. strlen() wird anders benutzt.
du solltest mit python programmierung weitermachen, wenn du noch garkeine programmiererfahrungen hast.
Wie kommst du auf python? Weitermachen?
Nun wie, wenn nicht durch machen bekommt man denn Erfahrung?
-
c programmierung ist nicht ideal fuer absolute anfaenger, weil man neben den ganzen grundsaetzlichen konzepten der programmierung auch noch mit den eigenheiten und "lowleveligkeit" von C belastet wird.
wenn du noch nie programmiert hast, such dir eine einfache sprache wie python. da kannst du lernen.
bis einem anfaenger klar wird, was wirklich im computer abgeht (was fuer programmierung essentiell ist!), vergeht ne weile. in der gleichen zeit die grundlagen der programmierung zu verstehen ist ne grosse belastung. wenns geht nimm dir nur eins auf einmal vor.
ich (oder ueberhaupt irgendwer) koennte dir das ganze benoetigte wissen einfach aufschreiben oder erzaehlen. selbst dann musst du das alles noch verstehen, akzeptieren und verinnerlichen. wie schnell das geht haengt vom talent ab.
-
Ok, easy schon klar.
ich bin nicht ganz so ne Noobe wies tönt.
ich hab schon einiges in Pascal/Delphi gemacht (und ja python hab ich mir angesehn), von daher kenn ich Schleifen und Funktionen, und das Konzept der oop.
"Lowlevel"C hab ich echt noch nicht so drauf, das stimmt schon. ich lern ja noch. das mit Arrays und Pointern und so muss ich noch schnallen..bin heut schonmal n Stück weitergekommenJedenfalls nochmal besten Dank fürs weiterhelfen.
ps @TactX: das Leben ist hart, ich mags hart
-
c.rackwitz schrieb:
wenn du noch nie programmiert hast, such dir eine einfache sprache wie python. da kannst du lernen.
oder ein olles BASIC mit zeilennummern und gotos
c.rackwitz schrieb:
bis einem anfaenger klar wird, was wirklich im computer abgeht (was fuer programmierung essentiell ist!)...
ich bin mir sicher: das sehen die oop-fans anders
ausserdem: wenn man wirklich wissen will wie's funzt sollte man sich vielleicht besser mit assembler auseinandersetzen. heute hat natürlich keiner mehr bock auf sowas, weil die pc's so gigahertzig sind, dass selbst die übelsten interpretersprachen ausreichend rennen...