Bonjour,

J'ai un petit problème de compréhension d'un comportement avec le code 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;
}
Le résultat généré est le suivant :
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
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 ?