2010-04-15 13 views
7

Perdón por poner una publicación sobre algo tan simple, pero no veo lo que estoy haciendo mal aquí.¿Cómo se imprime un número limitado de caracteres?

char data[1024]; 
DWORD numRead; 

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

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

Mi intención con lo anterior es leer datos de un archivo, y luego solo imprimir 5 caracteres. Sin embargo, imprime todos los 1024 caracteres, lo que es contrario a lo que estoy leyendo here. El objetivo, por supuesto, es hacer algo como:

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

¿Qué estoy haciendo mal aquí?

Respuesta

24

Usted tiene sus parámetros en el orden equivocado. El debe escribirse:

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

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

El primer parámetro a printf es el especificador de formato seguido por todos los argumentos (que dependen de su especificador).

+0

Es el punto ('.') innecesaria en las cadenas de formato anteriores? – kevinarpe

+0

@kevinarpe - no. –

4

creo que está cambiando el orden de los argumentos a printf:

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

Está utilizando la sintaxis incorrecta para la instrucción printf, y .number es solo para variables numéricas.

lo que debe ser

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

.número funciona bien con matrices de caracteres, solo necesita poner los argumentos en el orden correcto. –

+2

Para cadenas, la precisión (es decir, los números) le dice a printf que imprima no más de N caracteres de la cadena. Esto es muy útil si su cadena no está '\ 0' terminada. –

+1

Wow. Aprendí algo nuevo. Yo siempre lo asumí. Gracias. – sjchoi

1

No está llamando() printf correctamente.

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

que significa ...

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