Posix是否为printf/scanf提供格式字符串宏
Does Posix supply format string macros for printf/scanf?
C中的printf
和scanf
函数族使用与基本数据类型–%d
用于int
,%llu
用于unsigned long long int
等
然而,人们希望在实践中使用大量的标准化类型别名,例如int32fast_t
,并且人们不能也不应该知道底层的基本类型。对于stdint.h
中的别名,谢天谢地,C标准指定了一组宏来生成inttypes.h
中相应的格式字符串,如PRI32
。
Posix是否有类似的宏集?Posix有很多不透明类型,如ssize_t
、pid_t
、rlim_t
、suseconds_t
等,它们都是基本整数类型的变体。如何在格式化字符串中方便地使用这些类型?
sfio包(AT&T实验室开源AST软件的一部分)具有类似于printf和scanf的功能,可以指定数值的大小(通常使用sizeof()
)作为附加参数。一些例子:
sfprintf(sfstdout, "%I*d", sizeof(intval), intval);
sfscanf(sfstdin, "%I*f", sizeof(fltval), &fltval);
USENIX论文:使用Sfio的扩展数据格式。
Posix保证sys/types.h值是"适当长度的算术类型",其他一些值被进一步指定为无符号或有符号的"扩展长度"。输出这些内容的唯一标准可接受的方式是通过最大适当的语言类型(u)intmax_t中的强制转换进行传输,然后输出。
输入它们会更危险(即,以符合标准的方式是不可能的),因为很难保证转换到基本类型不会溢出一些内容。
相关文章:
- 是否可以从格式字符串中检索"width"
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 从用户定义的类生成格式字符串?
- 如何连接格式字符串?
- 如何在C++中将"%Y%m%d"格式字符串转换为time_t变量?
- CPPCHECK C++成员函数上的格式字符串
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 自定义 {fmt} 格式化函数,具有编译时格式字符串检查功能
- '|' scanf 格式字符串是什么意思
- 如何使用 msgfmt 验证格式字符串中的位置表示法占位符
- sscanf_s:格式字符串"%d"需要类型为"int *"的参数,但可变参数 4 的类型为"WORD *"
- C4477: 'fprintf' :格式字符串 '%s' 需要类型为"char *"的参数,但可变参数 1 的类型为"int *"
- 如何使用OpenSSL API从其PEM格式字符串中读取RSA公钥
- C 格式字符串宏
- C++等效于 C 的格式字符串
- 如何使用 C++ 中的 rapidjson 库从 json 格式字符串中获取值
- _vsnprintf和_vsnprintf_s的格式字符串中的可用百分比字符
- 如何将格式字符串发送到iostream
- 跨平台格式字符串
- 使用 swprintf() 打印"0x0"的格式字符串应该是什么?