为什么打印 strlens 不适用于 int 值?

Why does printing strlens not work for a int value?

但是它适用于长数据类型?

例如

printf("%i", strlen("test")) -- errors 
printf("%li", strlen("test")) -- this works

strlen 不是 return 一个 int 或一个 long,它 return 是一个 size_t。看来在您的系统中,size_tlong.

的大小相同

但是如果你要用 printf 打印出 size_t,你应该使用 %zu 来完成它。无论 intlongsize_t 的相对大小如何,这都应该有效(在足够新的编译器上支持它)。在将 %zu 添加到规范之前(例如,C89/90),我们通常会在打印之前将 size_t 转换为 unsigned long(然后使用 %lu,显然)。

strlenreturnssize_t,不是intsize_t 是无符号类型; int 已签名。

传递与格式说明符不匹配的值是未定义的行为。 size_t 的正确格式说明符是 %zu。 (C 标准,§ 7.19.6.1:6)。