Recibí esta advertencia: el parámetro sizeof on array function devolverá el tamaño de ‘const char *’ en lugar de ‘const char ‘

Posible duplicado:
¿Por qué sizeof (param_array) es el tamaño del puntero?

Soy nuevo en C, recibí una advertencia de clang al comstackr mi código:

 #include char *strcpy (char destination[],const char source[]); int main(void) { char str1[] = "this is a very long string"; char str2[] = "this is a short string"; strcpy(str2, str1); puts(str2); return 0; } char *strcpy (char destination[], const char source[]) { int size_of_array = sizeof source / sizeof source[0]; for (int i = 0; i < size_of_array; i++) { destination[i] = source[i]; } return destination; } 

No sé qué significa la siguiente advertencia:

 string_copy_withou_pointer.c:12:29: warning: sizeof on array function parameter will return size of 'const char *' instead of 'const char []' [-Wsizeof-array-argument] int size_of_array = sizeof source / sizeof source[0]; ^ string_copy_withou_pointer.c:11:46: note: declared here char *strcpy (char destination[], const char source[]) { 

¿Alguna idea?

Esto se debe a que const char source[] en la posición de argumento es solo azúcar sintáctica para const char *source . Ver, por ejemplo, las notas C de Steven Summit .

En este caso particular, querrás llamar a strlen . Cuando no esté tratando con cadenas, pase el tamaño de la matriz como un argumento separado.

Esta advertencia le indica que si llama a sizeof(char[]) no obtendrá el tamaño de la matriz sino el tamaño de un puntero char* .

Esto significa que su variable size_of_array estará equivocada porque no representará el tamaño de la matriz real.

Creo que estás buscando esto.

El tamaño de la matriz no sigue cuando se la pasa a la función. En realidad, se pasa como un indicador, por lo que se menciona el mensaje de advertencia

devolverá el tamaño de ‘const char *’