超过4个参数的“snprintf”有什么用?

Vij*_*jay 0 c printf linux-device-driver

我的代码中有如下内容:这是在 linux 下创建设备的代码 /dev

#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);
Run Code Online (Sandbox Code Playgroud)

第四参数snprintfdev->type分配有像琴弦epsonhpcanon

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

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

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

Kam*_*Cuk 6

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

结果是:

str = "printer_epson%u".
Run Code Online (Sandbox Code Playgroud)

然后代码执行:

device_create(..., str, dev->nMinor);
Run Code Online (Sandbox Code Playgroud)

这真的是:

device_create(..., "printer_epson%u", dev->nMinor);
Run Code Online (Sandbox Code Playgroud)

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

旁注:"%s%s", dev->type, "%u")看起来很奇怪,可能只是"%s%%u", dev->type);. 无论如何,它本来可以device_create(...., "%s%u", dev->type, dev->nMinor)