为什么打印 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_t
与 long
.
的大小相同
但是如果你要用 printf
打印出 size_t
,你应该使用 %zu
来完成它。无论 int
、long
和 size_t
的相对大小如何,这都应该有效(在足够新的编译器上支持它)。在将 %zu
添加到规范之前(例如,C89/90),我们通常会在打印之前将 size_t
转换为 unsigned long
(然后使用 %lu
,显然)。
strlen
returnssize_t
,不是int
。 size_t
是无符号类型; int
已签名。
传递与格式说明符不匹配的值是未定义的行为。 size_t
的正确格式说明符是 %zu
。 (C 标准,§ 7.19.6.1:6)。
但是它适用于长数据类型?
例如
printf("%i", strlen("test")) -- errors
printf("%li", strlen("test")) -- this works
strlen
不是 return 一个 int
或一个 long
,它 return 是一个 size_t
。看来在您的系统中,size_t
与 long
.
但是如果你要用 printf
打印出 size_t
,你应该使用 %zu
来完成它。无论 int
、long
和 size_t
的相对大小如何,这都应该有效(在足够新的编译器上支持它)。在将 %zu
添加到规范之前(例如,C89/90),我们通常会在打印之前将 size_t
转换为 unsigned long
(然后使用 %lu
,显然)。
strlen
returnssize_t
,不是int
。 size_t
是无符号类型; int
已签名。
传递与格式说明符不匹配的值是未定义的行为。 size_t
的正确格式说明符是 %zu
。 (C 标准,§ 7.19.6.1:6)。