Qué significa esta statement ? printf (“”, (int) longitudes ,

Estaba leyendo esta página http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html hay una línea

printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); 

del código

  MYSQL_ROW row; unsigned int num_fields; unsigned int i; num_fields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { unsigned long *lengths; lengths = mysql_fetch_lengths(result); for(i = 0; i < num_fields; i++) { printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); } printf("\n"); 

}

¿Qué significa [%.*s] en ese código?

[%.*s] es una printf formato printf significa:

  • el primer argumento debe ser un entero (especificando la longitud máxima de una cadena para imprimir).
  • El segundo argumento debe ser la propia cadena.
  • el [ y ] (y el espacio al final) se transfieren como están.

Normalmente, .7s algo así como .7s que significa una cadena de 7 caracteres. El uso de * para la longitud significa tomarlo del argumento dado.

Entonces, lo que hace esa línea completa es imprimir una cadena, cuya longitud se encuentra en lengths[i] , y el valor de la row[i] (a menos que la row[i] sea ​​NULL, en cuyo caso usa el literal cadena "NULL" ).

%.*s es una cadena de formato de salida.

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

 printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); 

Específicamente en este caso, significa imprimir el segundo argumento (contenido de la row[i] o ‘NULL’ si el contenido de la row[i] evalúa como falso) con un máximo de caracteres de lengths[i] . Los corchetes no forman parte del formato, se imprimen ellos mismos

la parte [%.*s] es una cadena de formato para printf.

especifica que printf() debe generar una cadena ( row[i] ) pero debe limitar la salida a la longitud especificada por un parámetro ( length[i] ). la cadena de salida está encerrada entre corchetes.

Consulte la documentación de printf() para obtener más información sobre las cadenas de formato.