For faster navigation, this Iframe is preloading the Wikiwand page for printf.

printf

Un ejemplo de la función printf.

Numerosos lenguajes de programación implementan una función printf (print formatted), para mostrar una cadena con formato. Esta, originaria del lenguaje de programación C, tiene un prototipo similar al siguiente:

 int printf(const char *formato, ...)

La cadena constante formato provee una descripción de la salida, con placeholders marcados por caracteres de escape "%", para especificar la localización relativa y el tipo de salida que la función debe producir.

Por ejemplo en C:

  printf("Color: %s, Número1: %d, Número2: %05d, Hexadecimal: %x, Real: %5.2f.\n", "rojo", 12345, 89, 255, 3.14);

imprimirá la siguiente línea (incluyendo el carácter de nueva línea \n):

 Color: rojo, Número1: 12345, Número2: 00089, Hexadecimal: ff, Real: 3.14.

La función printf retorna el número de caracteres impresos, o un valor negativo si ocurre un error.

Ejemplo

El clásico ejemplo de Hola Mundo! para mostrar esta cadena de texto.

#include <stdio.h>
 
int main(void)
{
    printf("¡Hola, mundo!\n");
    return 0;
}

Formateadores

printf permite dar formato específico a la salida, aquí algunos ejemplos:

Formateador Salida
%d o %i entero en base 10 con signo (int)

printf("El numero entero en base 10 es: %d", -10);

%u entero en base 10 sin signo (int)
%o entero en base 8 sin signo (int)
%x entero en base 16, letras en minúscula (int)
%X entero en base 16, letras en mayúscula (int)
%f Coma flotante decimal de precisión simple (float)
%lf Coma flotante decimal de precisión doble (double)
%ld Entero de 32 bits (long)
%lu Entero sin signo de 32 bits (unsigned long)
%e La notación científica (mantisa / exponente), minúsculas (decimal precisión simple o doble)
%E La notación científica (mantisa / exponente), mayúsculas (decimal precisión simple o doble)
%c carácter (char)
%s cadena de caracteres (string)

Truncamiento

Los formateadores permiten ser modificados para definir cantidad de dígitos o caracteres, introduciendo los parámetros de cantidad de dígitos y dígitos significativos como se puede notar en el siguiente ejemplo:

printf("%[#_de_dígitos_a_la_derecha_del_punto].[#_de_dígitos_a_la_izquierda_del_punto]d")
printf("%2d",   1234);  // Imprime: 34
printf("%.2d",  1234);  // Imprime: 34
printf("%-2d",  1234);  // Imprime: 12
printf("%-.2d", 1234);  // Imprime: 12
Formateador Salida
%7i justificado a la derecha, 7 dígitos de largo, sin relleno
%07i largo mínimo de 7 dígitos, justificado a la derecha, rellena con ceros
%8.2f tamaño total de 8 dígitos, con dos decimales
%.*f”',x,d) tamaño predeterminado,x números decimales
%*.*f”,x,y,d) tamaño igual a x, y números decimales
%s cadena terminada en null
%5s primeros cinco caracteres o delimitador
%.5s primeros cinco caracteres, sin tener en cuenta el delimitador
%20.5s primeros cinco caracteres, justificados a la derecha, con 20 caracteres de largo
%-20.5s primeros cinco caracteres, justificados a la izquierda, con 20 caracteres de largo

Funciones derivadas

sprintf

Prototipo:.

 int sprintf(char *str, const char *format, ...)

Devolviendo: un entero, que índica el número de caracteres leídos.

Ejemplo de uso ( C ):

#include <stdio.h>

int main()
{
    char cadena[12];
    char buffer[120];
    char *buffer1 = "Hemos escrito un ESLOGAN con sprintf - ";
    int i, j, numerito = 78989, tam_cad, tam_buffer;
   
    for(i = 0; buffer1[i] != '\0'; i++) buffer[i] = buffer1[i]; /* Copiamos un STRING a Cadena y medimos su tamaño */
    tam_buffer = i;
    tam_cad = sprintf(cadena, "%d", numerito); /* Pasamos a cadena el número ( de entero a char* ) */
    for(i = 0, j = tam_buffer; i < tam_cad; i++, j++) buffer[j] = cadena[i]; // Le pegamos la cadena ( contiene el numerito )
    buffer[j] = '\0';
    
    printf("\n\n %s \n\n", buffer);
    
    return 0;
}

Mostraría: Hemos escrito un ESLOGAN con sprintf - 78989

fprintf

fprintf file print format permite que la salida de printf pueda escribirse en cualquier archivo. Los programadores suelen utilizarlo para imprimir errores, pero puede funcionar con cualquier archivo abierto con la función fopen. Su prototipo, dentro del archivo de cabecera stdio.h, sería:

 int fprintf(FILE *stream, const char *format, ...)
donde:
  • *stream: es el flujo del archivo abierto, es decir la variable·puntero declarada a fopen
  • *format. sería lo que se quiere guardar.

snprintf

snprintf string number print format produce una salida con formato como printf, pero en vez de enviarlo al stdout lo escribe a una cadena de caracteres. A diferencia de sprintf esta necesita el número de bytes que queremos escribir, pudiendo evitar así más fácilmente un problema de desbordamiento de buffer. Su prototipo, dentro del archivo de cabecera stdio.h, sería:

 int snprintf(char *str, size_t size, const char *format, ...)
donde:
  • char *str: Cadena de destino.
  • size_t size: Número de bytes a escribir. Se suele poner el tamaño de la cadena destino.
  • const char *format,... : Formato habitual de printf.

Veamos un ejemplo:

  int edad = 5;
  char nombre[10] = "Juan";
  char cadena[10];
  
  snprintf(cadena, sizeof(cadena), "Me llamo %s y tengo %d años", nombre, edad);

En este caso snprintf escribiría en la variable "cadena" los 10 primeros bytes de "Me llamo Juan y tengo 5 años"

asprintf

asprintf() hace lo mismo que sprintf() pero este reserva la memoria suficiente para contener la cadena de caracteres deseada, posteriormente se tendrá que usar free() en la cadena. Esta función no es estándar en C ni en POSIX. Se trata de una extensión de GNU. Su prototipo es:

 int asprintf(char **restrict strp, const char *restrict fmt, ...);
donde:
  • strp es un puntero a la cadena de destino
  • fmt es el formato habitual
  #define _GNU_SOURCE
  #include <stdio.h>
  [...]
  int edad = 5;
  char nombre[10] = "Juan";
  char *cadena = NULL;
  
  asprintf(&cadena, "Me llamo %s y tengo %d años", nombre, edad);
  free(cadena);


Véase también

{{bottomLinkPreText}} {{bottomLinkText}}
printf
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?