007
14.10.2005, 21:11 Uhr
Lewi
|
Zitat von ~Realmaster: |
Hallo. Habe eine Frage zu Pointern. Also ich habe eine Funktion aus der ich mehrere Werte haben will. Da ich nur einen zurückgeben kann, habe ich den anderen Adressen mit pointern zugewiesen. Das klappt für alle Variablen ganz gut. Nur jetzt habe ich einen String auf den ich verweisen will und dabei klappt es nicht. Warum???
|
Hallo Realmaster
Vielleicht mal an der Stelle eine ganz andere Vorgehensweise, wie Du mehrere Werte aus einer Function rausholen kannst. Ich gebe das Musterbeispiel in klassichem C an, weil ich mit C++ nicht so gut umgehen kann.
1.) Definiere Dir eine Struktur, in der Du die Werte einer Funktion reinschreibst. Kannst es auch mit einzelnen Variablen machen, aber eine Struktur ist da oft sauberer, weil sie wie gesagt strukturiert.
C++: |
typedef struct interface tag { int wert1; int wert2; ..... char string1[100], } interface;
2.) Bau Deine Funktionen wie folgt auf
int f1(interface *if_pointer) { /* Code */
strncpy(&if_pointer->string[0],&dein_string[0},100); };
int f2(interface *if_pointer) { /* Code */ };
main() { interface my_interface;
/* irgendein Code*/
f1(&my_interface); f2(&my interface);
/ irgend ein anderer Code**/ };
|
In der Funktion main() wird eine interface-struktur angelegt. Dorthin kopiert f1 seine Werte, unter anderem Deinen String, die sich f2 beim Aufruf abholt.
Dein Ansatz, in f2 auf einen string in f1 zu verweisen klappt aus folgendem Grund nicht:
1.) Wenn Du f1 aufrufst, werden die lokalen Variablen, die Du definierst auf dem Stack des Programs reserviert. 2.) Wenn Du f1 verlässt, wird der Platz auf dem Stack wieder freigegeben. 3.) Wenn Du f2 aufrufst, ist f1 schon lange abgearbeitet und der lokale Speicher wieder freigegeben, daher kann f2 eine lokale Variable von f1 gar nicht kennen, daher streikt dann Dein Compiler.
Gruß Lewi
mod edit: Benutze CPP Tags selber Dieser Post wurde am 15.10.2005 um 00:30 Uhr von Pablo editiert. |