|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 2
|
[C] funzioni con numero di parametri variabile
Ciao a tutti,
questo è il mio primo messaggio (di richiesta aiuto). Ho un problema con le funzioni con numero di parametri variabile. Non sono molto pratico di C, e l'argomento non è dei più comuni... Il programma sotto non funziona, nel senso che l'output è Sono una Stringa Sono una <caratteri a caso> L'intero è 13 L'intero è -1079797532 invece di quello atteso... Sicuramente sbaglio qualcosa, ma non so cosa. Grazie! #include <stdio.h> #include <stdlib.h> #include <stdarg.h> void myPrintfCore(const char* format, ...) { char buff[256]; va_list ap; va_start(ap, format); vsprintf(buff, format, ap); printf("%s", buff); va_end(ap); } void myPrintf(const char* format, ...) { va_list ap; va_start(ap, format); myPrintfCore(format, ap); va_end(ap); } int main() { char s[128]; int i = 13; strcpy(s, "Stringa"); printf("Sono una %s\n", s); myPrintf("Sono una %s\n", s); printf("L'intero è %d\n", i); myPrintf("L'intero è %d\n", i); return 0; } |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Perché poi hai fatto 2 funzioni?? Ne basta una: void myPrintf(const char* format, ...) { va_list ap; va_start(ap, format); vprintf(format, ap); va_end(ap); }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
vabbè, mi han preceduto
stesso consiglio, fai una funzione sola
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#4 | |
|
Junior Member
Iscritto dal: Nov 2007
Messaggi: 2
|
Quote:
Cioè: BufferElement::fappend(const char* format, ...) e TextLogger::message(const char* format, ...) { ... this->buffer->fappend(format, ap); ... } |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Una funzione che riceve un numero variabile di argomenti non può nemmeno passare pari pari gli N argomenti che ha ricevuto ad un'altra funzione con numero variabile di argomenti. Per un motivo molto semplice. Nella funzione non sai a priori quanti/quali argomenti vengono passati. Nelle funzioni con numero variabile di argomenti, in genere la elaborazione degli argomenti è "pilotata" da una qualche stringa di formato (o in base ad altre convenzioni). Motivo per cui solo esaminando la stringa di formato si potrebbe capire quanti sono gli argomenti e di che tipo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:17.




















