C size_t et ssize_t valeur négative

size_t est déclarée comme unsigned int donc il ne peut pas représenter la valeur est négative.
Il est donc ssize_t qui est le signé type de size_t droit?
Voici mon problème:

#include <stdio.h>
#include <sys/types.h>

int main(){
size_t a = -25;
ssize_t b = -30;
printf("%zu\n%zu\n", a, b);
return 0;
}

pourquoi j'ai eu:

18446744073709551591
18446744073709551586

comme résultat?
Je sais qu'avec size_t cela pourrait être possible parce que c'est un type non signé mais pourquoi j'ai eu un mauvais résultat aussi avec ssize_t??

Vous utilisez la mauvaise spécificateur de format.
ssize_t n'est pas dans la norme C, il vient de POSIX. La ferme en C standard qui vient à l' ssize_t est ptrdiff_t.
size_t est un unsigned type intégral, mais c'est usuall pas unsigned int. Est généralement équivalent à unsigned long ou unsigned long long.

OriginalL'auteur polslinux | 2012-08-29