c - que - el formato ''% d'' espera un argumento de tipo ''int'', pero el argumento 2 tiene el tipo ''size_t''
size_t arduino (2)
He buscado sobre esta advertencia y todos cometieron algún error en su código, pero aquí hay algo muy inesperado que no pude entender. Esperamos que strlen (x) sea un número entero, pero ¿qué me dice esta advertencia? ¿Cómo no podría ser strlen int?
In function ‘fn_product’:
line85:3:warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat]
Mi código en fn_product -
char *fn_product (char x[],char y[]){
if (strlen(x)==1) // line85
printf("/nlength of string--%d/n", strlen(x));
/*other code*/
}
¿No debería ser strlen (x) int? ¿Por qué dice que es de formato size_t?
¿Revisaste la página de manual ? strlen(3)
devuelve size_t
. Use %zu
para imprimirlo.
Como se menciona en los comentarios a continuación, a veces el clang es útil para encontrar mejores mensajes de error. La advertencia de Clang para este caso es bastante buena, de hecho:
example.c:6:14: warning: format specifies type ''unsigned int'' but the argument
has type ''size_t'' (aka ''unsigned long'') [-Wformat]
printf("%u/n", strlen("abcde"));
~^ ~~~~~~~~~~~~~~~
%zu
1 warning generated.
Agregue int()
a su código, arreglaría el error :)
printf("/nlength of string--%d/n", (int)strlen(x))