|
2 registered members (Quad, AndrewAMD),
1,007
guests, and 6
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Structelement als Rückgabeparameter einer function
#293437
10/11/09 14:07
10/11/09 14:07
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
OP
Serious User
|
OP
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
Ich habe einen Struct mit mehreren Elementen:
typedef struct
{
var nr;
...
STRING* mdl;
STRING* mdl2;
STRING* bmp;
TEXT* info;
BMAP* bild;
} Item;
Item *ITEM[ANZ_ITEM];
Danach rufe ich eine function mit returnparameter auf:
{
...
ITEM[i].nr = VERSCHLUESSELUNG_AUS(ZAHL_,TEMP_STR_1);
...
ITEM[i].mdl = VERSCHLUESSELUNG_AUS(STRING_,TEMP_STR_1);
ITEM[i].bmp = VERSCHLUESSELUNG_AUS(STRING_,TEMP_STR_1);
}
in der function gebe ich den Parameter zurück:
function VERSCHLUESSELUNG_AUS(var typ, STRING* ORG_STR)
{
STRING* ZIEL_STR ="";
STRING* ZEICHEN_STR ="";
var string_asc = 0;
string_asc = file_asc_read (Filehandle);
string_asc -= 127;
str_cpy (ZIEL_STR,"");
str_for_asc (ZIEL_STR,string_asc);
while(1)
{
string_asc = file_asc_read (Filehandle);
if (string_asc == 64) // Trennzeichen
{
if (typ) return (str_to_num (ZIEL_STR)); // Gib Nummer zurück
else return (ZIEL_STR); Gib stringpointer zurück
}
string_asc -= 127;
str_for_asc (ZEICHEN_STR,string_asc);
str_cat (ZIEL_STR,ZEICHEN_STR);
}
}
Jetzt habe ich folgendes Problem: wenn ich mehrere vars des Structs so setze, geht das ohne Probleme. Wenn ich nur EIN STRING des Structs so setze, geht das auch. Aber sobald ich den 2. STRING (ITEM[i].bmp = VERSCHLUESSELUNG_AUS) setzen will, setzt er mir den String nicht in ITEM[i].bmp, sondern immer in den ersten STRING des Structs (ITEM[i].mdl). Dasselbe mit STRING nr. 3 und 4, immer wird String 1 gesetzt.
Last edited by Widi; 10/11/09 15:02.
|
|
|
Re: Structelement als Rückgabeparameter einer function
[Re: Widi]
#293510
10/12/09 02:47
10/12/09 02:47
|
Joined: Feb 2009
Posts: 84 Deutschland/Niedersachsen
GorNaKosh
Junior Member
|
Junior Member
Joined: Feb 2009
Posts: 84
Deutschland/Niedersachsen
|
Moin, du benutzt die Strings in der Funktion nur als lokale Variablen, deren Speicherbereich nicht festgelegt ist. Du musst jeden String, der über die Laufzeit der Funktion für dich existieren soll, mit malloc() oder str_create() erstellen. Außerdem ist es eig gängige Praxis den Funktionsheader wie folgt aussehen zu lassen wenn es einen Rückgabewert gibt:
STRING* VERSCHLUESSELUNG_AUS(var typ, STRING* ORG_STR);
Also sollte das in etwa so aussehen (nicht getestet):
STRING* VERSCHLUESSELUNG_AUS(var typ, STRING* ORG_STR)
{
STRING* ZIEL_STR = str_create("#99");
STRING* ZEICHEN_STR = str_create("#99");
var string_asc = 0;
string_asc = file_asc_read (Filehandle);
string_asc -= 127;
str_cpy (ZIEL_STR,"");
str_for_asc (ZIEL_STR,string_asc);
while(1)
{
string_asc = file_asc_read (Filehandle);
if (string_asc == 64) // Trennzeichen
{
str_remove(ZEICHEN_STR);
return (ZIEL_STR);
}
string_asc -= 127;
str_for_asc (ZEICHEN_STR,string_asc);
str_cat (ZIEL_STR,ZEICHEN_STR);
}
}
{
...
ITEM[i].nr = str_for_num(VERSCHLUESSELUNG_AUS(ZAHL_,TEMP_STR_1));
...
ITEM[i].mdl = VERSCHLUESSELUNG_AUS(STRING_,TEMP_STR_1);
ITEM[i].bmp = VERSCHLUESSELUNG_AUS(STRING_,TEMP_STR_1);
}
|
|
|
Re: Structelement als Rückgabeparameter einer function
[Re: GorNaKosh]
#293514
10/12/09 04:39
10/12/09 04:39
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
OP
Serious User
|
OP
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
Danke für die Antwort. Habe den String im Struct natürlich mit str_create erstellt. Werde das mit dem Funktionsheader heute Abend testen...
Last edited by Widi; 10/12/09 13:39.
|
|
|
Re: Structelement als Rückgabeparameter einer function
[Re: Widi]
#293559
10/12/09 13:38
10/12/09 13:38
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
OP
Serious User
|
OP
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
STRING* ZIEL_STR = str_create("#99"); Das war der Fehler, habe den String wie du gesagt hast nur Lokal definiert. Läuft jetzt super, vielen Dank. Gruss aus dem verschneiten Davos.. 
|
|
|
|