/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
... argument
Fra : Frank Nielsen


Dato : 29-12-02 18:57

Hej

Jeg har et lille problem i mit C kode som jeg håber nogen kan hjælpe mig
med. Nedenfor er listet et test prg. i 2 version, da jeg har forsøg via
de 2 test eksempler at opnå det samme resultat men uden hjælp :(

>>>>>>>>>>> Forsøg via va_list <<<<<<<<<<<<<<<<<<<<<
void test1_1( char* message, ... ) {
va_list args;
va_start( args, message );
vprintf( message, args );
va_end( args );

}

void test1_2( char* message, ... ) {
va_list args;
va_start( args, message );
test1_1( message, args );
va_end( args );
}

>>>>>>>>>>> Forsøg med "det jeg plejer" <<<<<<<<<<<<<<<<<<<<<
void test2_1( char* message, ... ) {
vprintf( message, (char*)&message+sizeof(char*) );
}

void test2_2( char* message, ... ) {
test2_1( message, (char*)&message+sizeof(char*) );
}

----------------------------

void main( int argc, char* argv[] ) {
test2_2( "%d:%s:%d", 1, "Hej", 10 );
}

I begge tilfælde virker det hvis jeg kalder testx_1 dvs direkte til
vprintf funktionen. Hvis jeg kalder igennem testx_2 virker det ikke
(stacker er f...ed up), det er her i gerne må hjælpe mig :)

Cheers, Frank


 
 
Jesper Toft (30-12-2002)
Kommentar
Fra : Jesper Toft


Dato : 30-12-02 11:34

Frank Nielsen wrote:

> void test1_1( char* message, ... ) {
> va_list args;
> va_start( args, message );
> vprintf( message, args );
> va_end( args );
>
> }
>
> void test1_2( char* message, ... ) {
> va_list args;
> va_start( args, message );
> test1_1( message, args );
> va_end( args );
> }

du kalder test1_1 med en reference til en va_list.. dvs din vsprintf bliver
kaldt med en va_list hvor første variabel er en va_list... ændring til flg
vil hjælpe:

vprintf(message,va_arg(args,va_list));


> >>>>>>>>>>> Forsøg med "det jeg plejer" <<<<<<<<<<<<<<<<<<<<<
> void test2_1( char* message, ... ) {
> vprintf( message, (char*)&message+sizeof(char*) );
> }
>
> void test2_2( char* message, ... ) {
> test2_1( message, (char*)&message+sizeof(char*) );
> }

UHA!... Den måde har jeg aligevel aldrig set før
Samme problem.. Der bliver kun sendt et parameter over.. En reference til en
position på den forrige funktions stack. I stedet for, som det nok var
tænkt, alle parametre. flg ville vist løse det:

vprintf( message, *(char*)&message+sizeof(char*) );


/Jesper Toft


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste