TheDodger
18-05-2001, 19:11
ich habe ein etwas verzwicktes problem, wo ich nicht so sehr weiter weiß. das dumme dabie ist, das sich das problem auch reichlich schlecht beschreiben lässt, aber ich will es trotzdem mal versuchen. :-)
die vorraussetzung: ich programmiere derzeit eine eigne lib in c++, stelle aber das interface zur lib für c zur verfügung.
für folgenden funktionsaufruf soll die funktion abgebildet werden:
(der code ist _nicht_ vollständig!!!)
enum
{
NAME = 5,
FOO,
BAR,
SEMMEL,
NIX,
NOCH,
EIN,
BEISPIEL
};
char *name;
char *foo;
char *bar;
int nix;
func( NAME, name,
FOO , foo,
BAR , bar,
NIX , nix,
NULL );
printf("%s - %s - %s - %u\n", name, foo, bar, nix );
die vars, die mit enum vergeben werden sind nur bezeichner, um sie in eben etwas auseinander halten zu können.
ich möchte eben eine funktion haben, die ich einmal aufrufen und mehrere werte gleichzeitig zurückbekomme.
Oben soll nur als beispiel dienen, ich hätte auch das hier nehmen können:
func( BAR , bar,
NIX , nix,
NULL );
bislang habe ich das _versucht_ auf diese art zu lösen:
void func( int code, ... )
{
char *_name, bar;
char *foo = "schlumpf";
va_list arg;
va_start( arg, code );
for( ; ; code = va_arg( arg, int ) )
{
switch( code )
{
case NAME:
_name = ( char * )malloc( strlen( foo ) + 1 ); // reserviere mem
strncpy( _name, foo, strlen( foo ) + 1 ); // zuweisung
// printf( "%s\n", _name ); // testausgabe
// und jetzt muß _name noch in den addressraum der orig. var kopiert werden ... NUR WIE??
(char *)arg[1] = _name; // !segfault!
break;
case FOO:
break;
case NULL:
va_end( arg );
return;
}
}
}
func() darf hier komplett mittels c++ abgebildet sein, nur der aufruf muß zwingend als c funktion realisierbar sein.
hat jemand mein problem verstanden? ;-)
ich glaube, langsam versteh ich das selber nicht mehr ...
Bodo
die vorraussetzung: ich programmiere derzeit eine eigne lib in c++, stelle aber das interface zur lib für c zur verfügung.
für folgenden funktionsaufruf soll die funktion abgebildet werden:
(der code ist _nicht_ vollständig!!!)
enum
{
NAME = 5,
FOO,
BAR,
SEMMEL,
NIX,
NOCH,
EIN,
BEISPIEL
};
char *name;
char *foo;
char *bar;
int nix;
func( NAME, name,
FOO , foo,
BAR , bar,
NIX , nix,
NULL );
printf("%s - %s - %s - %u\n", name, foo, bar, nix );
die vars, die mit enum vergeben werden sind nur bezeichner, um sie in eben etwas auseinander halten zu können.
ich möchte eben eine funktion haben, die ich einmal aufrufen und mehrere werte gleichzeitig zurückbekomme.
Oben soll nur als beispiel dienen, ich hätte auch das hier nehmen können:
func( BAR , bar,
NIX , nix,
NULL );
bislang habe ich das _versucht_ auf diese art zu lösen:
void func( int code, ... )
{
char *_name, bar;
char *foo = "schlumpf";
va_list arg;
va_start( arg, code );
for( ; ; code = va_arg( arg, int ) )
{
switch( code )
{
case NAME:
_name = ( char * )malloc( strlen( foo ) + 1 ); // reserviere mem
strncpy( _name, foo, strlen( foo ) + 1 ); // zuweisung
// printf( "%s\n", _name ); // testausgabe
// und jetzt muß _name noch in den addressraum der orig. var kopiert werden ... NUR WIE??
(char *)arg[1] = _name; // !segfault!
break;
case FOO:
break;
case NULL:
va_end( arg );
return;
}
}
}
func() darf hier komplett mittels c++ abgebildet sein, nur der aufruf muß zwingend als c funktion realisierbar sein.
hat jemand mein problem verstanden? ;-)
ich glaube, langsam versteh ich das selber nicht mehr ...
Bodo