C语言printf使用错误导致程序崩溃

在 C 语言中,printf 的格式化字符串中,%ld 表示以 十进制有符号长整型(signed long int) 格式打印变量。具体解析如下:


1. %ld 的含义

  • %:格式化说明符的起始符号。

  • l:长度修饰符(long 类型)。

  • d:表示输出的是 有符号十进制整数

因此,%ld 用于打印 signed long int 类型的变量。


2. 适用场景

  • 当变量是 long 或 long int 类型时(通常是 32 位或 64 位,具体取决于平台)。

  • 例如:

    c

    复制

    下载

    long num = -123456789L;
    printf("Number: %ld\n", num);  // 输出:Number: -123456789

3. 与类似格式符的区别

格式符含义适用类型
%d有符号十进制整型int
%ld有符号十进制长整型long 或 long int
%lld有符号十进制长长整型long long
%u无符号十进制整型unsigned int
%lu无符号十进制长整型unsigned long

4. 在 ESP32 中的注意事项

  • ESP32 的 long 大小

    • 在 32 位架构(如 ESP32)中,long 通常是 32 位,与 int 相同。

    • 但使用 %ld 可以明确表明变量是 long 类型,增强代码可读性。

  • 打印 uint32_t 时的替代方案
    如果需要打印无符号长整型(如 uint32_t),建议用 %lu 或跨平台的 PRIu32

    c

    复制

    下载

    #include <inttypes.h>
    uint32_t value = 4294967295;
    printf("Value: %lu\n", (unsigned long)value);  // 方法 1
    printf("Value: %" PRIu32 "\n", value);         // 方法 2(推荐)

5. 常见错误

  • 类型不匹配
    如果用 %ld 打印 int 类型,可能不会报错但会引发未定义行为(UB)。

    c

    复制

    下载

    int num = 42;
    printf("%ld\n", num);  // 错误!应用 %d
  • 符号混淆
    %ld 用于有符号数,打印无符号数应用 %lu

    unsigned long num = 123456;
    printf("%lu\n", num);  // 正确
    printf("%ld\n", num);  // 可能输出错误值

6. 示例代码

#include <stdio.h>

int main() {
    long a = -123456789L;
    unsigned long b = 4294967295UL;
    int c = 32767;

    printf("a (signed long): %ld\n", a);    // 正确
    printf("b (unsigned long): %lu\n", b);   // 正确
    printf("c (int): %d\n", c);              // 正确
    // printf("c (wrong): %ld\n", c);        // 错误!

    return 0;
}

总结

  • %ld:专用于 signed long int 类型。

  • ESP32 开发:注意 long 是 32 位,打印 uint32_t 时优先用 PRIu32

  • 避免错误:严格匹配格式化字符串与变量类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值