正在浏览一些旧代码并发现:
char buf[...];
int i = 1, j =2;
snprintf(buf, "%d-blah_%d-blah_%N", i, j);
Run Code Online (Sandbox Code Playgroud)
注意只有两个传递的vararg参数,但是3个格式字符串.
它打印
1-blah_2-blah_0
Run Code Online (Sandbox Code Playgroud)
在任何文档中都找不到这个.%N做什么?
根据标准文档(例如POSIX printf),它没有定义任何内容(因此%N可能是未定义的行为,并且在标准中肯定是未指定的行为).
但是,GNU glibc提供了自定义printf功能.您的程序可能已经注册(其他地方)register_printf_function需要处理的事情%N.这不是标准的,并且是特定于GNU的glibc
(但是,这是一个方便的技巧,但你不能教GCC format函数属性来了解这个技巧.).
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |