gpt4 book ai didi

c - sprintf() 中的意外结果

转载 作者:太空狗 更新时间:2023-10-29 15:45:45 24 4
gpt4 key购买 nike

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

char pcMessage[255];
iMsgAllocatedLength=255;
unsigned long long ullRecordID = 135290303ULL;
sprintf_s(pcMsg, iMsgAllocatedLength, "%08X;%llu", ullRecordID, ullRecordID);

给出如下结果

08105DBF;581067426850930688;

同时

sprintf_s(pcMsg, iMsgAllocatedLength, "%010llu;%08X;", ullRecordID, ullRecordID);

给出预期的结果

0135290303;08105DBF

请注意我只是颠倒了顺序,还要注意
581067426850930688 是 08105DBF00000000

请帮助我理解。

最佳答案

使用 %X 格式说明符打印 unsigned long long 是未定义的行为,因为 sprintf 需要 unsigned int 对于 %X。当您因不幸的巧合而切换说明符时,它会产生正确的结果。不同平台上的行为可能不一样。

使用%llX打印值:

sprintf_s(pcMsg, iMsgAllocatedLength, "%08llX;%llu", ullRecordID, ullRecordID); 

关于c - sprintf() 中的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43785563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com