Bonjour,
Pouvez vous m'expliquer pourquoi le code suivant m'écrit :
-2147483648
dans mon fichier ?
merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 size_t a = INT_MAX; a += 1; fprintf(ftest, "%zd",a);
Bonjour,
Pouvez vous m'expliquer pourquoi le code suivant m'écrit :
-2147483648
dans mon fichier ?
merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 size_t a = INT_MAX; a += 1; fprintf(ftest, "%zd",a);
l'attribut %z dans le fprintf, il correspond à quoi ?
et— limit of size_t
SIZE_MAX 65535
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.
Pas chez moi en tout cas :
m'écrit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 size_t a = INT_MAX-1; int b = INT_MAX -1; fprintf(ftest, "%zd %d\n",a, b);
2147483646 2147483646
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 : Sélectionner tout - Visualiser dans une fenêtre à part printf ("%lu\n", (unsigned long)sizeof(int));
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
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.
Partager