2010-04-15 9 views
7

dispiace di mettere un post su circa una cosa così semplice, ma non vedo che cosa sto facendo male qui.Come si stampa un numero limitato di caratteri?

char data[1024]; 
DWORD numRead; 

ReadFile(handle, data, 1024, &numRead, NULL); 

if (numRead > 0) 
    printf(data, "%.5s"); 

La mia intenzione con quanto sopra è quello di leggere i dati da un file, e quindi stampare solo 5 caratteri. Tuttavia, stampa tutti i 1024 caratteri, il che è contrario a ciò che sto leggendo here. L'obiettivo, ovviamente, è di fare qualcosa del tipo:

printf(data, "%.*s", numRead); 

Cosa sto facendo di sbagliato qui?

risposta

24

Hai i tuoi parametri nell'ordine sbagliato. Il dovrebbe essere scritto:

printf("%.5s", data); 

printf("%.*s", numRead, data); 

Il primo parametro da printf è l'identificatore di formato seguito da tutti gli argomenti (che dipendono dal vostro identificatore).

+0

È il punto ('.') inutili nelle stringhe di formato di cui sopra? – kevinarpe

+0

@kevinarpe - no. –

4

penso che si sta passando l'ordine degli argomenti per printf:

printf("%.5s", data); // formatting string is the first parameter 
-2

Si sta utilizzando la sintassi errata per l'istruzione printf e il valore .numero è solo per le variabili numeriche.

Così dovrebbe essere

int i; 
for(i=0;i<5;i++) 
    printf("%c", data[i]); 
+0

. Il numero funziona bene con gli array di caratteri, ha solo bisogno di mettere gli argomenti nel giusto ordine. –

+2

Per le stringhe, la precisione (ovvero i numeri) indica a printf di stampare non più di N caratteri dalla stringa. Questo è molto utile se la tua stringa non è "\ 0" terminata. –

+1

Wow. Ho imparato qualcosa di nuovo. Ho sempre pensato. Grazie. – sjchoi

1

Non stai chiamando() in modo corretto printf.

int printf (const char * format, ...); 

Il che significa ...

printf("%.5s", data); 
Problemi correlati