int lsdetails(struct stat *astatbuff) {
printf("%d", astatbuff->st_size);
printf("%d", astatbuff->st_atime);
printf("%s\n", getpwuid(astatbuff->st_uid)->pw_name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
警告:格式'%d'需要类型为'int'的参数,但参数2的类型为'__off_t'[-Wformat]
我收到了上面的错误消息,但我不明白为什么.我说我只是路过一个参数,两者的印象st_size和st_atime.
与C开始计数为0(数组元素:-)不同,gcc从1开始计算函数参数.因此printf (fmt, value),"参数1"将引用fmt,"参数2"引用value.容易,不是吗?
至于printf的正确整数类型__off_t,目前还没有100%保证和便携的方式.您最好的选择是将其转换为您的实现支持的最宽的无符号类型.请注意,一个unsigned long只能是32位宽,你会遇到文件> = 4GB的问题.如果您有C99实现,或者它支持unsigned long long,您应该没问题
printf("%llu", (unsigned long long)astatbuff->st_size);
Run Code Online (Sandbox Code Playgroud)
有当前POSIX标准化组中讨论()提供更多的printf格式说明符匹配其他POSIX类型,如off_t,pid_t等一旦是出了门(不要屏住呼吸),打印文件大小将是一个小更便携和优雅.
| 归档时间: |
|
| 查看次数: |
4203 次 |
| 最近记录: |