Visual c++ 符号不匹配:';无符号短';当对';的调用需要某种签名类型时,作为#参数传递;swprintf';

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位无符号整数(很可能是

符号不匹配:“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位无符号整数(很可能是
无符号短

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的函数时,可能会发生缓冲区不足或溢出。这是正在显示的警告..请帮助!