提问者:小点点

为什么sprintf只转换我的uint64_t数据的一半?


#include <iostream>



using namespace std;

int main()
{
    uint64_t a = 0xffffffffffffffff;
    int c = 3;
    char b[16];
    sprintf(b, "%X", a);
    cout << b << endl;
    return 0;
}

这是打印和存储一半的fs,我需要他们的其余部分,我如何做到这一点?


共1个答案

匿名用户

您正在通过传递类型错误的数据来调用未定义的行为。

以大写十六进制打印uint64_t的类型格式是prix64,在标题中定义。

另外,不要忘记为终止空字符分配。

#include <iostream>
#include <cstdio>    // sprintf()
#include <cinttypes> // PRIX64 (and its family) is defined in this header



using namespace std;

int main()
{
    uint64_t a = 0xffffffffffffffff;
    int c = 3;
    char b[17]; // allocate also for terminating null-character
    sprintf(b, "%" PRIX64, a); // use correct format
    cout << b << endl;
    return 0;
}