2010-04-15 7 views
7

Désolé de mettre un poste à propos de quelque chose de si simple, mais je ne vois pas ce que je fais mal ici.Comment imprimer un nombre limité de caractères?

char data[1024]; 
DWORD numRead; 

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

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

Mon intention avec ce qui précède est de lire les données d'un fichier, puis d'imprimer seulement 5 caractères. Cependant, il imprime tous les 1024 caractères, ce qui est contraire à ce que je lis here. L'objectif, bien sûr, est de faire quelque chose comme:

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

Qu'est-ce que je fais mal ici?

Répondre

24

Vous avez vos paramètres dans le mauvais ordre. Le doit être écrit:

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

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

Le premier paramètre à printf est le spécificateur de format suivie par tous les arguments (qui dépendent de votre prescripteur).

+0

Est-ce que le point ('.') inutiles dans les chaînes de format ci-dessus? – kevinarpe

+0

@kevinarpe - no. –

4

Je pense que vous passez l'ordre des arguments à printf:

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

Vous utilisez une syntaxe incorrecte pour l'instruction printf et le numéro .n'est que pour les variables numériques.

Il doit donc être

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

.number fonctionne très bien avec les tableaux de caractères, il a juste besoin de mettre les arguments dans le bon ordre. –

+2

Pour les chaînes, la précision (c'est-à-dire les numéros.) Indique à printf d'imprimer au maximum N caractères de la chaîne. C'est très utile si votre chaîne n'est pas '\ 0' terminée. –

+1

Wow. J'ai appris quelque chose de nouveau. J'ai toujours juste supposé. Merci. – sjchoi

1

Vous n'êtes pas appeler printf() correctement.

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

Ce qui signifie ...

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