忽略格式字符串中的某些 % 参数

Ignore Some % Parameters in Format String

由于格式字符串经常出现,我有时 运行 遇到需要格式化字符串的情况,然后将该字符串发送到第二个函数以再次格式化。例如,我需要使用命令行工具将图像转换为视频,而命令行工具需要图像%d 作为输入。

我已经尝试了几种不同的方法来做到这一点,例如在格式字符串中放置一个 %s 语句并传递一个 %d 来填充 %s,但似乎有时它们有效,有时它们不起作用.我也试过\%\d,但好像也没用。

char *dir = "workingdirectory";
char *moviename = "movie.mp4";

char buffer[1000];//The string to pass to system
sprintf("avconv %s/image%s.png %s",dir,"%d",moviename);//This statement is not quite correct for this tool, because I only included inputs and outputs.
//Desired string: "avconv workingdirectory/image%d.png movie.mp4"

system(buffer);

当我 运行 这段代码出于某种原因时,一个大整数出现在 %d 应该出现的位置。 safe/reliable 在格式化后将 % 语句保留在字符串中的方法是什么?

您是否尝试过在第一个实例中使用 %% 转义 %,以便将其视为字符串,然后在第二个实例中将 %% 的出现替换为 %,这将 return 将其作为格式说明符?