Ho impostato il buffer sulla dimensione 100. Visualizzo il buffer nella funzione principale in cui viene dichiarato il buffer. Tuttavia, quando passo il buffer alla funzione e ottengo la dimensione di '4', pensavo che dovesse essere 100, poiché questa è la dimensione del buffer che ho creato in I . uscita: dimensione del buffer: 100 sizeof (buffer): 4passaggio del buffer di caricamento alle funzioni e acquisizione della dimensione del buffer
#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));
}
In main() hai dichiarato esplicitamente un array, mentre in load_buffer() hai dichiarato un puntatore. La differenza è che in main() il compilatore sa che il buffer è un array, ma in load_buffer() il compilatore non sa se il buffer proviene da una matrice, o una pace allocata di memoria nell'heap, o una struct o qualsiasi altra cosa . Il compilatore conosce solo l'indirizzo di memoria (quindi un puntatore), quindi sizeof() restituisce la dimensione dell'indirizzo di memoria, che è lungo 4 byte (perché è una macchina a 32 bit, se fosse una macchina a 64 bit, sarebbe 8 byte lunghi). Spero che questo aiuti a capire un po 'di più. – AndaluZ
Invece della funzione sizeof(), utilizzare strlen(), quindi restituisce la dimensione del valore del puntatore. – NandhaKumar