警告:格式“%s”需要类型为“char *”的参数,但参数 2 的类型为“__dev_t”[-Wformat=]
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘__dev_t’ [-Wformat=]
我在程序中使用 stat 文件系统,我想使用
打印设备 ID
printf("\nst_dev = %s\n",buf.st_dev);
但我收到错误消息:
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2
has type ‘__dev_t’ [-Wformat=]
这里 b 应该用什么代替 %s?
dev_t
(又名 __dev_t
)没有特定的格式说明符,但它应该是某种整数类型。如果你遵循 typedefs 的兔子洞并在标准头文件中定义你最终应该达到类型的基本定义。在我的系统上链是:
typedef __dev_t dev_t;
__STD_TYPE __DEV_T_TYPE __dev_t;
#define __DEV_T_TYPE __UQUAD_TYPE
#define __UQUAD_TYPE __u_quad_t
__extension__ typedef unsigned long long int __u_quad_t;
因此 %lu
可行。它在您的系统上可能有所不同,但很可能类似于 unsigned long int。当您遇到这些事情时,调查这些事情通常会有所帮助,您永远不知道您可能会了解事情的幕后工作原理。
st_dev
是 dev_t
类型,根据 POSIX definition:
是 整数类型
dev_t shall be an integer type.
所以使用 %s
打印它肯定是错误的。没有可移植的方式来打印它,因为在 POSIX 中没有为它定义格式说明符。您可以使用 intmax_t
打印它:
printf("\nst_dev = %jd\n", (intmax_t)buf.st_dev);
如果 intmax_t
不可用(例如 C89 系统),那么您可以将其转换为 long
。
我在程序中使用 stat 文件系统,我想使用
打印设备 IDprintf("\nst_dev = %s\n",buf.st_dev);
但我收到错误消息:
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘__dev_t’ [-Wformat=]
这里 b 应该用什么代替 %s?
dev_t
(又名 __dev_t
)没有特定的格式说明符,但它应该是某种整数类型。如果你遵循 typedefs 的兔子洞并在标准头文件中定义你最终应该达到类型的基本定义。在我的系统上链是:
typedef __dev_t dev_t;
__STD_TYPE __DEV_T_TYPE __dev_t;
#define __DEV_T_TYPE __UQUAD_TYPE
#define __UQUAD_TYPE __u_quad_t
__extension__ typedef unsigned long long int __u_quad_t;
因此 %lu
可行。它在您的系统上可能有所不同,但很可能类似于 unsigned long int。当您遇到这些事情时,调查这些事情通常会有所帮助,您永远不知道您可能会了解事情的幕后工作原理。
st_dev
是 dev_t
类型,根据 POSIX definition:
dev_t shall be an integer type.
所以使用 %s
打印它肯定是错误的。没有可移植的方式来打印它,因为在 POSIX 中没有为它定义格式说明符。您可以使用 intmax_t
打印它:
printf("\nst_dev = %jd\n", (intmax_t)buf.st_dev);
如果 intmax_t
不可用(例如 C89 系统),那么您可以将其转换为 long
。