我在程序中使用stat文件系统,我想使用
打印设备ID printf("\nst_dev = %s\n",buf.st_dev);
但我收到错误:
警告:格式'%s'需要类型为'char *'的参数,但参数为2 类型为'__dev_t'[-Wformat =]
在这里应该使用什么代替%s?
答案 0 :(得分:0)
dev_t
(aka __dev_t
)没有特定的格式说明符,但它应该是某种整数类型。如果您遵循typedef的兔子洞并在标准头文件中定义,您最终应该达到该类型的基本定义。在我的系统上,链是:
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类似。当你遇到这些东西时,调查这些东西通常很有帮助,你永远不知道你可以从中了解如何在幕后工作。
答案 1 :(得分:0)
st_dev
的类型为dev_t
,根据POSIX definition是整数类型:
dev_t应为整数类型。
所以使用%s
打印肯定是错误的。没有可移植的方式来打印它,因为在POSIX中没有为它定义格式说明符。您可以使用intmax_t
进行打印:
printf("\nst_dev = %jd\n", (intmax_t)buf.st_dev);
如果intmax_t
不可用(例如C89系统),那么您可以将其投放到long
。