2012-01-13 13 views
6

¿Hay una manera de reemplazar el carácter de espacio a 0 en el relleno printf de la anchura del campoprintf Relleno para cuerdas de 0

código utilizado

printf("%010s","this"); 

no se parece a trabajar para las cadenas !!

+1

¿Quiere decir el relleno en 'printf', no' scanf', no ¿tú? – zwol

+0

sí, lo siento, simplemente lo edité – Akash

+1

Técnicamente, el modificador '0' dice," Para otras conversiones (* no numérico, por ejemplo,% s *), el comportamiento no está definido. "Creo que las versiones anteriores de HPUX (y tal vez alguna otra System V Unices) en realidad haría esto para (o contra) usted, donde Linux y BSD generalmente no ... – BRFennPocock

Respuesta

8

De hecho, el indicador 0 solo funciona para las conversiones numéricas. Tendrá que hacerlo a mano:

int print_padleftzeroes(const char *s, size_t width) 
{ 
    size_t n = strlen(s); 
    if(width < n) 
     return -1; 
    while(width > n) 
    { 
     putchar('0'); 
     width--; 
    } 
    fputs(s, stdout); 
    return 0; 
} 
+0

bien, gracias ..... – Akash

+2

Una versión con menos tipeo: 'printf ("%. * S% s ", n> = 10? 0: (int) (10-n)," 0000000000 ", s);' –

+0

Esto realmente ayuda. Gracias, zwol. –

-1

Prueba esto:

printf("%010d%s", 0, "this"); 
+0

Eso imprimirá '0000000000' luego la cadena; OP quería un total de 10 caracteres –

2

¿qué pasa con

test="ABCD" 
printf "%0$(expr 9 - ${#test})d%s" 0 $test 

que le dará lo que necesita también.

~:00000ABCD 

o es usted quiere Padd con otros números simplemente cambiar

printf "%0$(expr 9 - ${#test})d%s" 1 $test 

le dará

~:11111ABCD 
+1

Bueno, pero eso no es C –