weird wildcards in format string argument of printf

to output in decimal notation of a char variable, we write like this

1
2
char a1 = 'a';
printf("a1 is [%d].\n", a1);

in the way we output an int variable.

but when we output a long variable, we must write like below reluctantly

1
2
3
#need to test in gcc.
long l1 = 123456789;
printf("l1 is [%ld].\n", l1);

don't say byte alignment.

自定义printf输出格式

glibc版,代码可参考

1
2
3
//libstrongswan/utils/printf_hook/printf_hook_glibc.c
register_printf_specifier
register_printf_function

要注意的是,由于gcc在编译时不认识自定义格式,默认会提示warning。
禁止此提示的方法是在gcc命令参数中加入

1
-Wno-format

vstr from http://www.and.org/vstr/
代码可参考

1
2
//libstrongswan/utils/printf_hook/printf_hook_vstr.c
vstr_fmt_add

在win32下,libstrongswan自已写了一个printf,代码在位置在

1
2
//libstrongswan/utils/printf_hook/printf_hook_builtin.c
builtin_vsnprintf

printf Stack overflow

可能原因是栈空间用光了,需要仔细检查上下文中,看有没有存在占很大空间的局部变量。有的话,改为堆上分配这些变量。