最近在学习整型溢出漏洞的时候碰到off_t等这样嵌套很深的数据类型,对于理解程序带来了大量的麻烦和误解,特来记录下学习到的解决办法
- C 语言可以统一转换为 long long 再用 %lld 输出。如果需要更加高精度的结果可以参考cplusplus比如int64_t,但需要注意的是,此时%lld输出只适合在32位平台上。比较好的方法是使用PRId64来格式化输出,从而实现跨平台(当然首先需要提前定义好宏)
#ifndef __STDC_FORMAT_MACROS
#define __STDC_FORMAT_MACROS
#endif
..........
#include<inttype.h>//头文件
需要提到的一点是c++11直接支持,可以不必添加该宏(_STDC_FORMAT_MACROS)
3. 带 _t 后缀的,只有 intmax_t/uintmax_t 用 %jd/%ju;ptrdiff_t 用 %t;size_t/ssize_t 用 %zu/%zd。
4. int16_t 等等,它们的格式化字符串都有,在 <inttypes.h> 中。