"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
在上面的输出字符串中,我无法理解像32
、33
、34
这样的数字是如何构建的。
我可以理解这是因为第 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 解释。
我的代码中有如下内容:
这是在 /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);
snprintf
的第 4 个参数 dev->type
被分配了像 epson
,hp
,canon
.
实现的输出是这样的:
printer_epson32
,printer_hp33
,printer_canon34
在上面的输出字符串中,我无法理解像32
、33
、34
这样的数字是如何构建的。
我可以理解这是因为第 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 解释。