Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
2 registered members (Quad, AndrewAMD), 1,007 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
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 Offline OP
Serious User
Widi  Offline OP
Serious User

Joined: Aug 2007
Posts: 1,922
Schweiz
Ich habe einen Struct mit mehreren Elementen:

Code:
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:

Code:
{
	...
	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:

Code:
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 Offline
Junior Member
GorNaKosh  Offline
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:
Code:
STRING* VERSCHLUESSELUNG_AUS(var typ, STRING* ORG_STR);



Also sollte das in etwa so aussehen (nicht getestet):
Code:
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 Offline OP
Serious User
Widi  Offline 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 Offline OP
Serious User
Widi  Offline 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.. frown


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1