printf/snprintf格式字符%N有什么作用?(不是%n)

mar*_*hon 4 c++

正在浏览一些旧代码并发现:

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做什么?

Bas*_*tch 7

根据标准文档(例如POSIX printf),它没有定义任何内容(因此%N可能是未定义的行为,并且在标准中肯定是未指定的行为).

但是,GNU glibc提供了自定义printf功能.您的程序可能已经注册(其他地方)register_printf_function需要处理的事情%N.这不是标准的,并且是特定于GNU的glibc (但是,这是一个方便的技巧,但你不能教GCC format函数属性来了解这个技巧.).