C变量用户为snprintf提供的格式字符串

时间:2015-03-17 19:14:12

标签: c string

我想制作一个像这样的文件

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

1 个答案:

答案 0 :(得分:0)

我能想到的有两种选择:

  1. 编写自己的字符串解析和插值(替换)函数,而不是使用*printf()(或使用合适的函数搜索某些第三方库)。

  2. 使用来自glibc的parse_printf_format(),它旨在处理这样的用途。这是不可移植的,我不知道其他libc实现提供了类似的功能。

  3. 但要小心。正如你所指出的那样,这可能很容易出错和危险。 :)