You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用%lu格式化uint64_t出现编译错误如何解决?

错误原因与修正方案

你代码里的报错由两个独立问题共同导致:

  1. 参数传递逻辑错误

    • scanf 第二个参数需要传入待写入内存的指针:你定义的testInteger本身已经是uint64_t *类型,直接指向malloc申请的uint64_t存储空间,直接传testInteger即可,额外加&会得到uint64_t **类型的指针的指针,和要求的参数类型不匹配。
    • printf 需要传入要打印的uint64_t值,你传的testInteger是指针,需要加*解引用拿到指向的实际值,也就是传*testInteger。
  2. 格式符使用错误
    不要直接用%lu匹配uint64_t,不同平台unsigned long的长度可能和uint64_t不一致,可移植性差。C标准库在<inttypes.h>头文件中专门定义了固定宽度整数的格式化宏:

    • 无符号64位整数的输入格式宏是 SCNu64
    • 无符号64位整数的输出格式宏是 PRIu64

修正后的完整代码

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h> // 必须引入该头文件才能使用上述格式宏

int main(void) {
    uint64_t* testInteger = malloc(sizeof(uint64_t));
    scanf("%" SCNu64, testInteger);  
    printf("%" PRIu64, *testInteger);
    free(testInteger);
    return 0;
}

注:C语言会自动拼接相邻的字符串常量,所以把宏直接写在格式字符串的%后面即可正常使用。

内容的提问来源于stack exchange,提问作者Appley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:39:00