Bonjour,
Pouvez vous m'expliquer pourquoi le code suivant m'écrit :
-2147483648
dans mon fichier ?
merci !Code:
1
2
3
4 size_t a = INT_MAX; a += 1; fprintf(ftest, "%zd",a);
Version imprimable
Bonjour,
Pouvez vous m'expliquer pourquoi le code suivant m'écrit :
-2147483648
dans mon fichier ?
merci !Code:
1
2
3
4 size_t a = INT_MAX; a += 1; fprintf(ftest, "%zd",a);
l'attribut %z dans le fprintf, il correspond à quoi ?
etCitation:
— limit of size_t
SIZE_MAX 65535
Citation:
z : Specifies that a following d, i, o, u, x, or X conversion specifier applies to a size_t or the corresponding signed integer type argument; or that a following n conversion specifier applies to a pointer to a signed integer type corresponding to size_t argument.
Désolé, je ne vois pas ou est le problème ?
Le problème c'est que je ne comprends pas pourquoi l'affichage de INT_MAX + 1 avec un type size_t et l'option %zd me donne un nombre négatif ?
Tu n'as pas lu ce que j'ai écrit alors!!
size_t => %zu
ssize_t => %zd
C'est une nouveauté du C99 apparemment. Pour afficher les variables de type size_t j'utilise %lu avec un cast en unsigned long en argument :
Je suppose qu'on peut aussi utiliser %u et (unsigned int) si on sait que la valeur à afficher ne dépasse pas 65535 (qui peut forcément être stocké dans un unsigned int).Code:printf ("%lu\n", (unsigned long)sizeof(int));
Cela n'a aucune importance, car à ma connaissance %z est utilisé aussi pour les ptrdiff_t.
Je ne suis pas d'accord avec la description: Pour moi, %z ne veut pas dire "c'est un size_t ou un truc qui y ressemble" mais "c'est un entier qui fait la taille d'un pointeur; les types size_t, ssize_t, ptrdiff_t, intptr_t répondent à ce critère"
d'après le man c'est %z pour size_t et %t pour ptrdiff_t
Aie! Au temps pour moi. :oops:
J'ignorais qu'il y avait deux spécificateurs différents pour les deux types.
Justement, j'utilise des size_t pour pouvoir avoir des grand nombres :)
J'ai également besoin d'enregistrer des doubles, en gardant une bonne précision (j'utilise alors %lg)
Peut être que cette façon de faire n'est pas très bonne, avez vous une autre méthode à me proposer ? peut être en binaire ? (mais là je ne sais pas comment on enregistre des double, surtout avec les problème d'endian :?)
Mon but est d'enregistrer le résultat de calculs de manière à pouvoir les recharger par la suite.