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

C变量用户为snprintf提供的格式字符串,c,string,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); 如果我对该文件再执行

例如,我想制作一个这样的文件

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,那么函数肯定会正常工作 原因3是snprintf的最后一个参数 有人能提供示例代码或想法来解决这个问题吗

注意:文件缓冲区指向字符串“hello%s%d秒…”
注意:我知道格式字符串可能很危险。。thx

我可以想到两种选择:

  • 编写自己的字符串解析和插值(替换)函数,而不是使用
    *printf()
    (或者使用合适的函数查找第三方库)

  • 来自glibc的用法,其设计用于处理类似的用法。这是不可移植的,我不知道还有哪些libc实现提供了类似的功能


  • 不过要小心。正如您所指出的,这很容易出错,也很危险。:)

    您可能需要
    sizeof(dest\u buffer)
    而不是
    strlen(file\u buffer)
    (假设
    dest\u buffer
    是一个数组,您至少需要传递其长度)。文件如何指定要转换的变量?“hello%s”是否与
    snprintf(…某些字符串)
    一起使用,以及与
    snprintf(…某些字符串)
    一起使用“%d秒”等等?我知道ulfilizer,我刚刚写了它,让您很快就明白了。。。chux就像我说的,文件会改变,格式字符串会改变…thx是我想要的,所以。。。我会看看parse_printf_格式,或者考虑一下thx ulfalizer