有人可以帮助我了解发生了什么吗?
char pcMessage[255];
iMsgAllocatedLength=255;
unsigned long long ullRecordID = 135290303ULL;
sprintf_s(pcMsg, iMsgAllocatedLength, "%08X;%llu", ullRecordID, ullRecordID);
给出以下结果
尽管
sprintf_s(pcMsg, iMsgAllocatedLength, "%010llu;%08X;", ullRecordID, ullRecordID);
给出预期的结果
请注意,我只是颠倒了顺序,还要注意的是
581067426850930688 是 08105DBF 00000000
请帮我理解。
最佳答案
使用 unsigned long long
格式说明符打印 %X
是未定义的行为,因为 sprintf
需要 unsigned int
的 %X
。当您不幸的巧合切换说明符时,它会产生正确的结果。不同平台上的行为可能不一样。
使用 %llX
打印值:
sprintf_s(pcMsg, iMsgAllocatedLength, "%08llX;%llu", ullRecordID, ullRecordID);
关于c - sprintf() 中的意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43785563/