merkwuerdiges problem mit variablen
-
Hi Leute...
Mein Problem ist folgendes:// zum herausfinden der string laenge int string_laenge( char wort[] ) { int a = 0; while( wort[a] != '\0' ) { a++; } return a; } // zum verschluesseln des wortes verschluessele( char wort[], char wort_ver[] ) { int laenge = string_laenge( wort ); for( int a = 0; a < laenge; a++ ) { wort_ver[a] = '_'; cout << " a: " << a << " : " << wort << " || "; } gotoxy( 1, 15 ); cout << " _____ WORT : _____ " << wort; }
In der Schleife in "verschluesseln" wird ja eigentlich bloss der Inhalt der Variablen wort_ver veraendert. Denkste... Mit zweiten Zeile in der Schleife gebe ich fuer jeden Zeilendurchgang auch das andere Wort aus (also die Variable wort). Und was sieht man. Diese wird auch veraendert.
Ich weiss nicht woran das liegt...
Kann mir jemand helfen?
MfG Aoeke
-
übergibst du vielleicht das selbe char array 2 mal ?
Devil
-
Also ich rufe die Funktion so auf:
char wort[] = "maus"; // wort normal char wort_ver[] = ""; // wort verschluesselt verschluessele( wort, wort_ver ); cout << "Wort: " << wort_ver;
Also ich uebergebe eigentlich 2 verschiedene arrays...
mfg aoeke
-
Ähm, du übergibst die arrays aber nicht leer, oder ?
Ich mein, so haben sie beide den selben InhaltDevil
-
mhm.. nein, habs editiert...
mfg aoeke
-
hm, also macht er das auch, wenn beide arrays nicht leer sind ?
Du must schon den passenden Speicher jeweils allokieren,
wort_ver ist in diesem fall ein leeres array.Devil
-
hrmm.. *huestel*...
allokieren
Hilfst du mir mal eben auf die Spruenge...
MfG aoeke
-
// zum herausfinden der string laenge int string_laenge( char * wort[] ) { int a = 0; while( wort[a] != '\0' ) { a++; } return a; } // zum verschluesseln des wortes char* verschluessele( char * wort[]) { int laenge = string_laenge( wort ); char * wort_ver = new char[laenge]; // Speicher allokieren ;D der genauso groß ist, wie "wort" for( int a = 0; a < laenge; a++ ) { wort_ver[a] = '_'; cout << " a: " << a << " : " << wort << " || "; } gotoxy( 1, 15 ); cout << " _____ WORT : _____ " << wort; return wort_ver; }
-
Aoeke schrieb:
Also ich rufe die Funktion so auf:
char wort[] = "maus"; // wort normal char wort_ver[] = ""; // wort verschluesselt verschluessele( wort, wort_ver ); cout << "Wort: " << wort_ver;
Also ich uebergebe eigentlich 2 verschiedene arrays...
mfg aoekeOffensichtlich wird wort_ver vor wort im speicher abgelegt.
wort_ver : '\0'
wort : 'm'
'a'
'u'
's'
'\0'wort_ver ist ein Array mit der Groesse 1.
Da die Funktion verschluessele uber die Arraygrenzen von wort_ver
hinausschreibt, wird der Speicher , in dem das Array wort liegt,
vollgeschrieben.Uebrigens, warum benutzt du nicht strlen
-
// zum verschluesseln des wortes char* verschluessele( char * wort[]) { int laenge = string_laenge( wort ); char * wort_ver = new char[laenge]; // Speicher allokieren ;D der genauso groß ist, wie "wort" for( int a = 0; a < laenge; a++ ) { wort_ver[a] = '_'; cout << " a: " << a << " : " << wort << " || "; } gotoxy( 1, 15 ); cout << " _____ WORT : _____ " << wort; return wort_ver; }
Schlechte Lösung. Du nimmst damit den Aufrufer in die Pflicht, den Speicher von wort_ver freizugeben, obwohl er ihn nicht reserviert hat.
Besser: reseviere ausserhalb von verschluessele().
-
Oh ich habe gar nicht mitbekommen, dass es hier noch was gab...
So... Also ich habe das Problem jetzt geloest, indem ich jetzt wirklich ausserhalb von der Funktion schon die Laenge festgelegt habe.
Also so:char wort[80]; // wort normal char wort_ver[80]; // wort verschluesselt
Naja, 'wort' bekommt dann irgendwann einen wert zugewiesen und anschliessend wird verschluesselt.
Also danke fuer eure Bemuehungen.
MfG Aoeke