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:
[
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.