我想制作一个像这样的文件
hello %s
%d seconds more
%d is more than %d
其中所有格式字符串都是用户提供的,并且将由snprintf程序更改。
问题是我是否更改了格式字符串的出现次数,因为snprintf
使用固定的参数值。 - 最后的参数......
理解我的想法,例如我想要它
snprintf(dest_buffer, strlen(file_buffer), file_buffer, "user123", 1, 3, 2);
如果我再对文件执行%s,那么函数doesent肯定会正常工作 原因3是最后一个arg到snprintf 有人可以提供示例代码或想法来解决这个问题
注意:file_buffer指向字符串“hello%s%d sec .....” 注意:我知道格式字符串可能很危险.. thx
答案 0 :(得分:0)
我能想到的有两种选择:
编写自己的字符串解析和插值(替换)函数,而不是使用*printf()
(或使用合适的函数搜索某些第三方库)。
使用来自glibc的parse_printf_format()
,它旨在处理这样的用途。这是不可移植的,我不知道其他libc实现提供了类似的功能。
但要小心。正如你所指出的那样,这可能很容易出错和危险。 :)