He configurado el búfer al tamaño 100. Muestro el búfer en la función principal donde se declara el búfer. Sin embargo, cuando paso el búfer a la función y obtengo el tamaño de '4', , pensaba que debería ser 100, ya que ese es el tamaño del buffer que I creó en main. salida: tamaño de búfer: 100 sizeof (buffer): 4pasando el búfer char a las funciones y obteniendo el tamaño del búfer
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
En main() declaró explícitamente una matriz, mientras que en load_buffer() declaró un puntero. La diferencia es que, en main() el compilador sabe que el búfer es una matriz, pero en load_buffer() el compilador no sabe si el búfer es de una matriz, o una paz de memoria asignada en el montón, o una estructura o lo que sea . El compilador solo conoce la dirección de memoria (por lo tanto, un puntero), así sizeof() devuelve el tamaño de la dirección de memoria, que tiene 4 bytes de longitud (porque es una máquina de 32 bits, si fuera una máquina de 64 bits, sería 8 bytes de largo). Espero que esto ayude a entender un poco más. – AndaluZ
En lugar de la función sizeof(), use strlen(), luego devuelve el tamaño del valor del puntero. – NandhaKumar