Bonjour,
J'ai un petit problème de compréhension d'un comportement avec le code suivant :
Le résultat généré est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 main(), size = 6 ma_fct1(), size = 4 ma_fct2(), size = 4 ma_fct3(), size = 4
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 ?
Partager