printf

PRINTF(3)               Manual del Programador de Linux              PRINTF(3)



NOMBRE
       printf, fprintf, sprintf, vprintf, vfprintf, vsprintf - conversión de
       salida formateada

SINOPSIS
       #include <stdio.h>

       int printf( const char *format, ...);
       int fprintf( FILE *stream, const char *format, ...);
       int sprintf( char *str, const char *format, ...);

       #include <stdarg.h>

       int vprintf( const char *format, va_list ap);
       int vfprintf( FILE *stream, const char *format, va_list ap);
       int vsprintf( char *str, char *format, va_list ap);

DESCRIPCION
       La familia de funciones printf produce una salida de acuerdo a format
       como se describe abajo.  Printf y vprintf escriben su salida a stdout,
       la corriente (stream) de salida estandar; fprintf y vfprintf escriben
       su salida a la stream dada ; sprintf, y vsprintf escriben a una cadena
       de caracteres str.  Todas estas funciones escriben la salida bajo el
       control de una cadena format que especifica como los subsecuentes
       argumentos (o argumentos accedidos via las facilidades de argumentos de
       longitud variables de stdarg(3) son convertidos para su salida. Estas
       funciones retornan el número de caracteres impresos (no incluyendo el
       delimitador `\0' usado para terminar la salida de cadenas).

       La cadena format está compuesta de cero o más directivas: caracteres
       ordinarios (no %), que son copiados sin cambios a la corriente (stream)
       de salida; y especificaciones de conversión, cada una de las que
       resulta en ir a buscar cero o más subsecuentes argumentos. Cada
       especificación de conversión es introducida por el caracter %.  Los
       argumentos deben corresponder adecuadamente según la conversión
       especificada. Luego de %, los siguientes caracteres pueden aparecer en
       secuencia:

       ·      Cero o más de las siguientes banderas:

              #      especificando que el valor debe ser convertido a un
                     ``formato alternativo''.  Para las conversiones c, d, i,
                     n, p, s, y u , esta opción no tiene efecto. Para la
                     conversión o , la precisión del número es incrementada
                     para forzar el primer caracterer de la cadena de salida a
                     cero ( excepto que un valor cero sea impreso con una
                     explÃcita precisión de cero).  Para conversiones x y X ,
                     un resultado distinto de cero tiene la cadena `0x' (o
                     `0X' para conversiones X ) precediendola.  Para
                     conversiones e, E, f, g, y G , el resultado siempre
                     contendrá un punto decimal, aún si ningún dÃgito lo
                     sigue ( normalmente, un punto decimal aparece solamente
                     en el resultado de aquellas conversiones que son seguidas
                     de algún dÃgito). Para conversiones g y G , los ceros
                     finales (trailing zeros) no son removidos del resultado.

              0      especificando el relleno con ceros. Para todas las
                     converiones excepto n, el valor convertido es rellenado a
                     la izquierda con ceros en vez de blancos.  Si una
                     precisión es dada con una conversión numérica (d, i,
                     o, u, i, x, y X), la bandera 0 es ignorada.

              -      (un campo negativo como flag) indica que el valor
                     convertido es justificado a la izquierda sobre el lÃmite
                     del campo. Excepto para conversiones n , el valor
                     convertido es rellenado a la derecha con blancos, en vez
                     de a la izquierda con blancos o ceros. Un - sobreescribe
                     un 0 si ambos son dados.

                     (un espacio) especifica que un blanco debe ser dejado
                     antes de que un número positivo sea producido por una
                     conversión de signo (d, e, E, f, g, G, o i).

              +      especifica que el signo siempre sera ubicado antes de un
                     número producido pora una conversión con signo.  Un +
                     sobreescribe un espacio si ambos son usados.

       ·      Una cadena de dÃgitos decimales opcionales especifican un ancho
              de campo mÃnimo, este puede ser rellenado con espacios a la
              izquierda (o derecha, si el flag de justificado a la izquierda a
              sido dado) para llenar el ancho del campo.

       ·      Una opcional precisión, con formato de un punto (`.') seguido
              por una cadena de dÃgitos opcionales. Si la cadena de dÃgitos es
              omitida, la precisición es tomada como cero. Esto da el mÃnimo
              número de dÃgitos para aparecer en las conversiones d, i, o, u,
              x, y X , el número de dÃgitos para aparecer luego del punto
              decimal para las conversiones e, E, y f , el máximo número de
              dÃgitos signifiativos para las conversiones g y G , o el máximo
              número de caracteres a ser impresos desde una cadena para las
              conversiones s

       ·      El caracter opcional h, especifica que una de las siguientes d,
              i, o, u, x, o X corresponde a un argumento short int o unsigned
              short int , o que una conversión siguiente n corresponde a un
              puntero a un argumento short int

       ·      El caracter opcional l (ele) especifica que una de las
              siguinetes conversiones d, i, o, u, x, o X aplica a un puntero
              de argumento long int o unsigned long int , que una conversión
              siguiente n corresponde a un puntero de argumento long int

       ·      El caracter L espeficifa que una de las siguientes conversions
              e, E, f, g, o G corrsponde a un argumento long double

       ·      Un caracter que especifica el tipo de conversión a ser
              aplicado.

       Un campo de ancho o precisión, o ambos, pueden ser indicados por un
       asterisco `*' a menos de una cadena de dÃgitos. En este caso, un
       argumento int suministra el campo de ancho o precisión. Un campo
       negativo es tratado como una bandera de justificado a la izquierda
       seguida por un campo de ancho positivo; una precisión negativa es
       tratada como si estuviese perdida.

       Los especificadores de conversión y sus significados son:

       diouxX El argumento int ( o la apropiada variante) es convertida a un
              decimal con signo (d y i), a octal sin signo (o, a decimal sin
              signo (u, a hexadecimal sin signo con notación (x y X) abcdef
              son usadas para conversiones x ; las letras ABCDEF son usadas
              para conversiones X si el valor convertido requiere menos dÃ‐
              gitos, este es rellenado a la izquierda con ceros.

       DOU    El argumento long int es convertido a un decimal con signo,
              octal sin signo, o decimal sin signo, como si el formato haya
              sido ld, lo, o lu respectivamente. Esas conversiones caracter
              son despreciadas, y pueden eventualmente desaparecer.

       eE     El argumento double es redondeado y convertido en un estilo
              [-]d.dddedd donde hay un dÃgito antes del caracter del punto
              decimal y el número de dÃgitos despues de este es igual a la
              precisión; si la precisión esta perdida, es tomada como 6; si
              la precisión es cero, ningún caracter del punto decimal
              aparece. Una conversión E usa la letra E ( en vez de e) para
              introducir el exponente. El exponente siempre contiene al menos
              dos dÃgitos; si el valor es cero, el exponente es 00.

       f      El argumento double es redondeado y convertido a una notación
              decimal del estilo [-]ddd.ddd, donde el número de dÃgitos luego
              del caracter del punto decimal es igual a la especificación de
              la precisión. Si la precisión esta perdida, es tomada como 6;
              si la precisión es cero, ningún caracter del punto decimal
              aparece. Si un punto decimal aparece, al menos un dÃgito aparece
              despues de este.

       g      El argumento double es convertido al estilo de f o e (o E para
              conversiones G ). La precisión especifica el número de dÃgitos
              significativos.  Si la precisión esta perdida, 6 dÃgitos son
              dados; si la precisión es cero, esta es tratada como 1. El
              estilo e es usado si el exponente para esta conversión es menor
              que -4 o más grande o igual a la precisión. Ceros finales son
              removidos de la parte fraccional del resultado; un punto decimal
              solo aparece si es seguido de al menos un dÃgito.

       c      El argumento int es convertido a un unsigned char, y el caracter
              resultante es escrito.

       s      El argumento ``char *'' es esperado como un tipo puntero a una
              cadena de caracteres. Caracteres del array son escritos hasta
              (pero no incluyendo) un caracter terminador NUL ; si una
              precisión es especificada, no más que el número especificado
              son escritos. Si una precisión es dada, ningún caracter nulo
              necesita estar presente; si la precisión no es specificada, o
              es más grande que el tamaño de la cadena, la cadena debe
              contener un caracter de terminación NUL

       p      El argumento puntero ``void *'' es impreso en hexadecimal (como
              con %#x o %#lx).

       n      El número de caracteres escritos hasta que es guardado en el
              entero indicado por el argumento ``int *'' (o la variante).
              Ningún argumento es convertido.

       %      Un `%' es escrito. Ningún argumento es convertido. La completa
              especificación de conversión es `%%'.

       En ningún caso un no existente o pequeño ancho de campo causa
       truncación del campo; si el resultado de una conversión es más ancho
       que el especificado, el campo es expandido para contener el resultado
       convertido.

EJEMPLOS
       Para imprimir fecha y hora en la forma `Sunday, July 3, 10:02', donde
       weekday y month son punteros a cadenas:
              #include <stdio.h>
              fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
                   weekday, month, day, hour, min);

       Para imprimir con cinco lugares decimales:
              #include <math.h>
              #include <stdio.h>
              fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));

       Para alojar una cadena de 128 bytes e imprimirla:
              #include <stdio.h>
              #include <stdlib.h>
              #include <stdarg.h>
              char *newfmt(const char *fmt, ...)
              {
                        char *p;
                        va_list ap;
                        if ((p = malloc(128)) == NULL)
                             return (NULL);
                        va_start(ap, fmt);
                        (void) vsnprintf(p, 128, fmt, ap);
                        va_end(ap);
                        return (p);
              }

VER TAMBIEN
       printf(1), scanf(3)

STANDARDS
       Las funciones fprintf, printf, sprintf, vprintf, vfprintf, y vsprintf
       estan conforme a ANSI C3.159-1989 (``ANSI C'').

BUGS
       Algunas conversiones de punto flotante bajo Linux causan pérdidas de
       memoria.

       Los formatos de conversiones %D, %O, y %U no son estandars y son
       provistos solo para compatibilidad hacia atrás. Pueden no ser
       provistas bajo Linux.

       El efecto de relleno del formato %p con ceros (tanto por la bandera 0 o
       por especificar una precisión), y el benigno efecto (p.e., nada) de la
       bandera # activa con las conversiones %n y %p , como con otras
       combinaciones sin sentido como %Ld, no son estandars; dichas
       combinaciones pueden ser evitadas.

       Como sprintf y vsprintf asumen una cadana de largo infinito, llamadores
       deben ser cuidadosos de no sobrepasar el espacio actual; esto es a
       menudo imposible de garantizar.



BSD                             Enero 10, 1995                       PRINTF(3)