c - 我应该如何打印像 off_t 和 size_t 这样的类型?

标签 c portability format-specifiers

我正在尝试打印 off_tsize_t 等类型。 printf() 可移植 的正确占位符是什么?

或者是否有一种完全不同的方式来打印这些变量?

最佳答案

打印off_t:

printf("%jd\n", (intmax_t)x);

打印size_t:

printf("%zu\n", x);

打印ssize_t:

printf("%zd\n", x);

参见C99标准中的7.19.6.1/7,或者更方便的格式化代码的POSIX文档:

http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html

如果您的实现不支持这些格式代码(例如,因为您使用的是 C89),那么您会遇到一些问题,因为据我所知,C89 中没有具有格式代码并保证和这些类型一样大。所以你需要做一些特定于实现的事情。

例如,如果您的编译器有 long long 并且您的标准库支持 %lld,您可以自信地期望它将代替 intmax_t。但如果不是,您将不得不回退到 long,这在其他一些实现上会失败,因为它太小了。

关于c - 我应该如何打印像 off_t 和 size_t 这样的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586928/

相关文章:

c - 关于C中scanf的转换说明符

java - java中的%%是什么意思?

c - 是否可以使用格式说明符作为函数的参数

c - 错误 : Failed to spawn fakeroot worker to run/PATH_TO_THIS/example_0. 1.bb:do_install: [Errno 2] 没有这样的文件或目录

c - 将输入中的数字加载到数组中

bash - 可移植的 shell 脚本有什么用?

portability - 如何将 JRE 与 Launch4j 捆绑在一起?

c - 更改 API 的最佳方法是什么

c - 产生独特的值(value)

java - java JDK可以移植吗?