【发布时间】:2012-08-29 09:59:50
【问题描述】:
size_t 被声明为unsigned int,因此它不能表示负值。
所以有ssize_t 这是size_t 的签名 类型,对吗?
这是我的问题:
#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;
}
我为什么得到:
18446744073709551591
18446744073709551586
结果?
我知道size_t 这可能是可能的,因为它是无符号类型,但为什么ssize_t 也得到错误结果??
【问题讨论】:
-
您使用了错误的格式说明符。
-
ssize_t不在标准 C 中,它来自 POSIX。ssize_t在标准 C 中的关闭是ptrdiff_t。 -
size_t是无符号整数类型,但通常不是unsigned int。通常相当于unsigned long或unsigned long long。