"snprintf"参数超过4个有什么用?

What is the use of "snprintf" with more than 4 parameters?

我的代码中有如下内容: 这是在 /dev

下的 linux 中创建设备的代码
#define PRINTER_STR "printer_"
char str[32];
snprintf(str, sizeof(str), PRINTER_STR "%s%s", dev->type, "%u");
device_create(mycan_drv.class, parent,
              MKDEV(dev->nMajor, dev->nMinor),
              dev, str, dev->nMinor);

snprintf 的第 4 个参数 dev->type 被分配了像 epson,hp,canon.

这样的字符串

实现的输出是这样的: printer_epson32,printer_hp33,printer_canon34

在上面的输出字符串中,我无法理解像323334这样的数字是如何构建的。 我可以理解这是因为第 5 个参数 "%u" 传递给了 snprintf。但是如何?

我得到的所有参考文献最多有 3 或 4 个参数 snprintf。 请帮忙。

char str[32];
dev->type = "epson";
snprintf(str, sizeof(str), "printer_" "%s%s", dev->type, "%u");

结果:

str = "printer_epson%u".

然后代码执行:

device_create(..., str, dev->nMinor);

这是真的:

device_create(..., "printer_epson%u", dev->nMinor);

然后在 device_create 中再次调用类似 *printf 的函数,它写入 dev->nMinor 代替 %u。所以,就像,写数字的不是snprintf,而是写在device_create里面的数字。 snprintf 用于为 device_create 创建格式化字符串,device_create 写入该数字。

旁注:"%s%s", dev->type, "%u") 看起来很奇怪,可能只是 "%s%%u", dev->type);。不管怎样,它本来可以 device_create(...., "%s%u", dev->type, dev->nMinor).

更简单的是:

snprintf(str, sizeof(str), PRINTER_STR "%s%%u", dev->type);

由于%u是一个固定的字符串,它可以只包含在格式中。 % 需要转义以避免被 snprintf 解释。