Brett vorm Kopf -> Zeiger
-
Hi, irgendwie blick ich grad garnicht merh durch:
void Function(char *szSource) { char TEST[50] = {"Ich soll den dummen Zeiger :D"}; szSource = TEST; }Jetzt "ist" szSource zwar TEST, aber den CharZeiger den ich dieser Funktion übergeben habe natürlich nicht... Wie kann ich das anstellen ?
Beispiel:void Function(char *szSource) { char TEST[50] = {"Ich soll in den dummen Zeiger :D"}; szSource = TEST; } //... // Im Code iwann.. char* CharValue; Function(CharValue); cout << CharValue; //So hier soll jetzt TEST drinne sein, aber iwie komm ich nicht mehr daruf.. Dachte erst an eine Referenz, // aber das geht ja bei strcpy oder auch da übergibt man ja auch nur nen ZeigerKann sein das die Frage grad völlig lächerlich ist

Aber ich komm einfach nicht mehr drauf wie das ging
Gruß Chris
-
mit strcpy oder ?
-
Das PRoblem ist das ich ja nur den Wert im Scope änder und nicht die Variable (in dem Fall Zeiger) den ich der Funktion übergebe, weil ja der char* Zeiger direct zum Array sobalt ich ihn zuweise... ^^
Gruß Chris
-
void sepp(char** p) { *p = "test234"; } int main() { char* p; sepp(&p); std::cout << p; }Soweit so gut. Probleme bekommst du aber sobald du in einen Zeiger etwas reinschreibst was zerstört wird bevor/während der Zeiger verwendet wird, also z.B. wenn du die Adresse einer lokalen Variable reinsteckst.
-
Das prob is bei diesem code:
void Function(char *szSource) { char TEST[50] = {"Ich soll in den dummen Zeiger :D"}; szSource = TEST; // Übergabe des WERTES von TEST an einen Zeiger(geht nicht,compiler fehler) } //... // Im Code iwann.. char* CharValue; Function(CharValue); cout << CharValue;gibst du einen zeichenwert an einen Zeiger, was nicht geht da ein Zeiger zum aufnehmen einer adresse gemacht ist.
Wenn du jedoch die adresse von TEST an den zeiger übergibst geht das auch nicht, da TEST NUR innerhalb der Funktion gültig ist.Lösungsvorschlag:
void Function(char szSource[50]) { char TEST[50] = {"Ich soll in den dummen Zeiger :D"}; szSource = TEST; } //... // Im Code iwann.. char CharValue[50]; Function(CharValue); cout << CharValue;Ich hoffe das hilft dir weiter.
-
@Yazoo: sorry, aber das funktioniert genausowenig wie der Code des OP.
Dein "char szSource[50]" Parameter führt genauso dazu dass ein Zeiger übergeben wird, und die Zuweisung auf "szSource" führt auch nicht dazu dass ein String kopiert wird, sondern es wird bloss der Zeiger verbogen.Funktionieren würde es mit strcpy.
Diese "Arraysyntax" bei Parametern ist ein Relikt aus C welches leider in C++ übernommen wurde, und nur Kopfweh verursacht. Am besten man vergisst dass sowas möglich ist, und schreibt anstelle dessen gleich eine Referenz:
void Function(char (&szSource)[50]) {...}Dann wirft der Compiler wenigstens auch eine Fehlermeldung raus wenn man eine Zuweisung versucht.
Oder man merkt sich: in C++ können Arrays nicht mit "=" kopiert werden.
void f() { int x[2]; int y[2]; x = y; // Fehler, geht nicht }