Fehler bei Zeigern ?

N

Nano

Foren As
Hi, um mich mit den Zeigern etwas besser auseinanderzusetzen habe ich eine kleine Methode geschrieben die 2 strings vertauscht , mir ist klar das man das auch anders lösen kann.
Wenn ich das ganze richtig verstanden habe sollte folgendes auch ohne probleme laufen


Code:
bool swap_strings(char * str1, char * str2){
	int lenstr1 = 0;
	int lenstr2 = 0;
	lenstr1 = strlen(str1);
	lenstr2 = strlen(str2);

	if(lenstr1 != lenstr2)
	{
		return false;
	}
	char  tmp = '\0';
	int i;
	for(i = 0; i < lenstr1; i++ )
	{
		tmp = *(str1 + i);
		cout << tmp << endl;
//---	//	*(str1 + i) = *(str2 + i);
//---	//	*(str2 + i) = tmp;
	}
	cout << "str 1 neu : " << str1 << endl;
	cout << "str 2 neu : " << str2 << endl;
	return true;

}

leider erhalte ich eine Exception : Status_Access_Violation
der fehler liegt bei dem mit //--- // kommentierten code, allerdings verstehe ich nicht wo.

*(str1 + i) entspricht dem inhalt/wert von str1 , es sollte also eigentlich nur eine ganz normale char vertauschung stattfinden oder ?
 
Hi,

soweit ich das sehen kann, ist deine Funktion auch korrekt, ich vermute dass der Fehler beim Aufruf liegt.

Ich vermute dass du die Funktion in etwa so getestet hast?
Code:
int main()
{
    char * hallo = "hallo";
    char * welt = "welt!";

    bool result = swap_strings(hallo, welt);

    std::cout << result << std::endl;
}
In so ziemlich jeder mir bekannten Programmiersprache sind die standard String Objekte immutable, und das ist auch in C++ nicht anders. Mit anderen Worten, du versuchst auf den Speicher einer konstanten Variablen zuzugreifen und das wird mit einem Speicherzugriffsfehler belohnt.

Das folgende sollte funktionieren:

Code:
int main()
{
    char * hallo = (char *)malloc(6);
    memcpy(hallo, "hallo", 6);

    char * welt = (char *)malloc(6);
    memcpy(welt, "welt!", 6);

    bool result = swap_strings(hallo, welt);

    std::cout << result << std::endl;

    free(hallo);
    free(welt);
}

Allerdings ist es laenger her dass ich etwas in C++ geschrieben habe, ich glaube malloc und free sollte man eigentlich nur in C benutzen, in C++ gab es da eventuell andere Funktionen fuer, aber das Prinzip sollte klar sein.

Im uebrigen ziehe ich persoenlich definitiv str deinem *(str + i) Konstrukt vor, ich finde str viel lesbarer.

mfg,
bytepool
 
Zuletzt bearbeitet:

Ähnliche Themen

String auf Konsole ausgeben

deprecated conversion from string constant to ‘char*’

[PHP] Autologin-Funktion

windows schneller als linux stdlib ...

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben