sizeof() et taille d'un buffer passé en paramètres de fonction
Bonjour,
J'ai un petit problème de compréhension d'un comportement avec le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| void ma_fct1(char Param[6])
{
printf("ma_fct1(), size = %d\n", sizeof(Param));
}
void ma_fct2(char * Param)
{
printf("ma_fct2(), size = %d\n", sizeof(Param));
}
void ma_fct3(char Param[8])
{
printf("ma_fct3(), size = %d\n", sizeof(Param));
}
int main(int /*argc*/, char * /*argv*/ [])
{
char buff[6];
printf("main(), size = %d\n", sizeof(buff));
ma_fct1(buff);
ma_fct2(buff);
ma_fct3(buff);
return 0;
} |
Le résultat généré est le suivant :
Code:
1 2 3 4
| main(), size = 6
ma_fct1(), size = 4
ma_fct2(), size = 4
ma_fct3(), size = 4 |
La taille du buffer est correctement calculée par sizeof() dans le main() mais n'est plus le résultat attendu dans les différentes fonctions (ma_fct1, ma_fct2 et ma_fct3). C'est comme ci, malgré la définition de la fonction, le compilateur disait que ce n'est pas un buffer de 6 ou 8 caractères mais un pointeur sur caractères (ce qui est vrai aussi).
D'autant plus que le compilateur ne hurle pas lorsque l'on passe un buffer de 6 à une fonction qui s'attend à recevoir un buffer de 8.
Quelqu'un aura t'il une explication ?