如何解决带有四个以上参数的“ 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
的第四个参数dev->type
被分配了诸如epson
,hp
,canon
之类的字符串。
实现的输出是这样的:
printer_epson32
,printer_hp33
,printer_canon34
在上面的输出字符串中,我无法理解如何构建32
,33
,34
之类的数字。
我知道这是由于第5个参数"%u"
传递给了snprintf
。但是如何?
我得到的所有参考都带有snprintf
的最多3或4个参数。
请帮助。
解决方法
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","%u")
看起来很奇怪,可能只是"%s%%u",dev->type);
。而且无论如何,一切可能只是device_create(....,"%s%u",dev->nMinor)
。
更简单的是:
snprintf(str,PRINTER_STR "%s%%u",dev->type);
由于%u
是固定字符串,因此可以仅包含在格式中。 %
必须转义以避免被snprintf解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。