Visual c++ 符号不匹配:';无符号短';当对';的调用需要某种签名类型时,作为#参数传递;swprintf';
符号不匹配:“unsigned short”在调用“swprintf”时需要某些签名类型,并作为_参数传递。 swprintf(缓冲区,L“%04d-%02d-%02d-%02d.%02d.%02d.%03d000”, sysTime.wYear,sysTime.W月,sysTime.W日, sysTime.wHour,sysTime.wMinute,sysTime.WSSecond,Visual c++ 符号不匹配:';无符号短';当对';的调用需要某种签名类型时,作为#参数传递;swprintf';,visual-c++,Visual C++,符号不匹配:“unsigned short”在调用“swprintf”时需要某些签名类型,并作为_参数传递。 swprintf(缓冲区,L“%04d-%02d-%02d-%02d.%02d.%02d.%03d000”, sysTime.wYear,sysTime.W月,sysTime.W日, sysTime.wHour,sysTime.wMinute,sysTime.WSSecond, 系统时间(秒) 系统时间SYSTEMTIME结构的成员属于WORD类型 类型字是一个16位无符号整数(很可能是
系统时间(秒) 系统时间
SYSTEMTIME
结构的成员属于WORD
类型
类型字
是一个16位无符号整数(很可能是无符号短
)
swprintf
的%d“
说明符需要类型为int
的参数
这有点奇怪,你的编译器警告你这一点。如果int
比short
宽(这是常见的,但不能保证),则类型为无符号short
的参数在传递给变量函数(如swprintf
)时,将提示输入int
。(如果int
和short
宽度相同,则无符号short
将升级为无符号int
)
通过确保所有参数实际上都是int
类型,可以避免此问题:
swprintf( buffer, L"%04d-%02d-%02d-%02d.%02d.%02d.%03d000",
(int)sysTime.wYear, (int)sysTime.wMonth, (int)sysTime.wDay,
(int)sysTime.wHour, (int)sysTime.wMinute, (int)sysTime.wSecond,
(int)sysTime.wMilliseconds );
对于具有固定数量和参数类型的函数,算术类型(有符号整数、无符号整数或浮点)的参数将隐式转换为正确的类型。对于变量函数,如printf
和swprintf
,函数的声明不提供此信息(格式字符串甚至可以是变量,让编译器完全不知道需要什么类型),因此,必须更加小心地确保传递的参数类型正确
(“some signed type”警告非常奇怪。有些警告是有理由的,因为用
%d”
格式传递无符号的short
是不可移植的,但是提升的参数必须是特定类型的int
。传递long
或long
,每种类型都是“some signed type”)那么问题是什么呢?错误消息真的说了“某个签名类型”吗?是的。这里再次出现警告消息:“警告C6340:符号不匹配:当调用“swprintf”时需要某些有符号类型时,“unsigned short”作为_Param_7传递。”该警告似乎是虚假的<代码>无符号短将在默认参数提升下提升为int
,它与%d
格式说明符完全匹配。我觉得你的代码写得很好。但是,如果您想让它满意,请将%d
替换为%u
警告C6328:大小不匹配:“unsigned short”在调用“swscanf\u s”时作为参数u6传递。这表明可能存在严重错误。当报告类似scanf的函数时,可能会发生缓冲区不足或溢出。这是正在显示的警告..请帮助!