J'ai mis le tampon à la taille 100. Je montre le tampon dans la fonction principale où le tampon est déclaré. Cependant, quand je passe le tampon à la fonction et obtiens le sizeof '4', je pensais qu'il devrait être 100, car c'est la taille du tampon que j'ai créé dans . sortie: taille de mémoire tampon: 100 sizeof (tampon): 4en passant le tampon char aux fonctions et en obtenant la taille du tampon
#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));
}
Dans main() vous avez explicitement déclaré un tableau, tandis que dans load_buffer() vous avez déclaré un pointeur. La différence est, dans main() le compilateur sait que le buffer est un tableau, mais dans load_buffer() le compilateur ne sait pas si le buffer provient d'un tableau, ou une paix allouée dans le tas, ou une structure ou autre . Le compilateur ne connaît que l'adresse mémoire (donc un pointeur), donc sizeof() renvoie la taille de l'adresse mémoire, qui est longue de 4 octets (parce que c'est une machine 32 bits, si c'était une machine 64 bits, octets longs). J'espère que cela aide à comprendre un peu plus. – AndaluZ
Au lieu de la fonction sizeof(), utilisez strlen(), puis il retourne la taille de la valeur du pointeur. – NandhaKumar