我正在学习c编程。我试图使自己的程序类似于 ls 命令,但选项较少。我正在做的是将输入目录/文件名作为参数,然后获取所有目录条目 dirent struct(如果是目录)。
之后我使用stat()来获取文件的所有信息但是这里是我的问题,当我使用write()打印这些值时它很好但是当我想用printf()打印这些时我得到警告:格式'%ld'需要类型'long int',但参数2的类型为'__uid_t'。我不知道在%ld 的位置以及其他特殊数据类型应该使用什么。
答案 0 :(得分:9)
__uid_t
没有格式说明符,因为这种类型是系统特定的,不是C标准的一部分,因此printf
不知道它。
通常的解决方法是将其推广到适合您所定位的所有系统上的整个UID值范围的类型:
printf("%lu\n", (unsigned long int)uid); /* some systems support 32-bit UIDs */
答案 1 :(得分:1)
你可以把它投射到一个长的int:
printf("foobar: %ld\n", (long int)your_uid_t_variable);