Je veux imprimer une variable de type size_t
en C mais il semble que size_t
soit aliasé à différents types de variables sur différentes architectures. Par exemple, sur une machine (64 bits), le code suivant ne lance aucune alerte :
size_t size = 1;
printf("la taille est %ld", size);
mais sur mon autre machine (32 bits), le code ci-dessus produit le message d'alerte suivant :
attention: le format '%ld' attend un type 'long int *', mais l'argument 3 a le type 'size_t *'
Je soupçonne que cela est dû à la différence de taille des pointeurs, de sorte que sur ma machine 64 bits size_t
est aliasé à un long int
("%ld"
), tandis que sur ma machine 32 bits size_t
est aliasé à un autre type.
Y a-t-il un spécificateur de format spécifique pour size_t
?
1 votes
Votre message d'avertissement ne correspond pas au code. L'avertissement mentionne les pointeurs, votre code n'en contient pas. Avez-vous supprimé des
&
quelque part?0 votes
Pointeurs? Non, je ne reçois aucune alerte concernant les pointeurs, en fait selon la machine sur laquelle j'exécute ce code, il m'arrive parfois de ne recevoir aucune alerte. Essayez le code de test suivant : #include int main(){ size_t size = 1; printf("la taille est %ld", size); return 0; }
2 votes
Voir également Chaîne de format multiplateforme pour les variables de type size_t?.
1 votes
@EthanHeilman Il fait référence au fait que vos avertissements disent
avertissement: format '%ld' attend le type 'long int *', mais l'argument 3 a le type 'size_t *'
quand il devrait probablement être en train de direavertissement: format '%ld' attend le type 'long int', mais l'argument 3 a le type 'size_t'
. Utilisiez-vous peut-êtrescanf()
à la place lorsque vous avez reçu ces avertissements?1 votes
Possibilité de doublon de Quelle est la bonne façon d'utiliser printf pour imprimer un size_t?