有人可以帮助我了解发生了什么吗?

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/

10-10 21:24