当前位置: 首页 > news >正文

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

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

相关文章:

  • 【Day 23】HarmonyOS开发实战:从AR应用到元宇宙交互
  • Java-很深我只知其一构造(Builder)
  • 第六章 进阶09 我的人才观
  • [Errno 122] Disk quota exceeded
  • OpenHarmony launcher开发——删除dock栏
  • J-Scope的RTT模式
  • 美颜SDK实时美颜的技术核心:图像增强算法与API交互机制详解
  • 跟我学C++中级篇——STL容器的查找对比
  • 输入顶点坐标输出立方体长宽高的神经网络
  • 进行性核上性麻痹饮食指南:科学膳食守护神经健康
  • 单位代码签名证书是什么?如何申请?
  • C++ 引用传参机制
  • Linux服务:Nginx服务重写功能
  • 【el-admin】el-admin关联数据字典
  • (undone) MIT6.S081 Lec17 VM for APP 学习笔记
  • 基于nodejs + Koa +Nuxt3的订单系统项目实战
  • 数据结构每日一题day17(链表)★★★★★
  • epic_kitchens_sounds数据集中对segment标签的处理:时间维度和特征维度的转换
  • onResume()和 onPause()的触发条件
  • 一文掌握 LVGL 9 的源码目录结构
  • 重庆大学通报本科生发14篇SCI论文处理结果
  • 会计江湖|年报披露关注什么:独董给出的“信号”
  • 韩国前国务总理韩德洙加入国民力量党
  • 夜读丨喜马拉雅山的背夫
  • 西安机场回应航站楼“水帘洞”事件:屋面排水系统被冰雹堵塞
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓