当前位置: 首页 > 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

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

http://www.xdnf.cn/news/361549.html

相关文章:

  • 39-算法打卡-二叉树-基础知识-第三十九天
  • C#里创建一个MaterialDesign3的导航条
  • uni-app使用web-view组件APP实现返回上一页
  • 机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]
  • 商业 |阿里云又丢出了核弹
  • Webug4.0靶场通关笔记24- 第29关Webshell爆破
  • 华为OceanStor 5500 V3存储证书过期问题处理
  • 在SpringBoot中使用MQTT实现消息的订阅
  • Element-UI字体图标不显示
  • Oracle — 数据管理
  • LVGL源码学习之渲染、更新过程(2)---无效区域的处理
  • 电厂数据库未来趋势:时序数据库 + AI 驱动的自优化系统
  • 期货跟单软件如何对实盘进行风控?
  • go语言封装、继承与多态:
  • 【A2A】管中窥豹,google源码python-demo介绍
  • Go语言中 源文件开头的 // +build 注释的用法
  • 母亲节祝福网页制作
  • 推荐一个很方便的浏览器管理插件Wetab插件
  • 水印云:AI赋能,让图像处理变得简单高效
  • VSCode如何解决打开html页面中文乱码的问题
  • 工业软件自主化突围:RTOS 如何打破 “协议栈 - 控制器” 生态垄断
  • 零件画图实战提升案例(上)
  • 企业高性能WEB服务器—Nginx
  • 【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别
  • 深度解析动态IP业务核心场景:从技术演进到行业实践
  • 住宅IP的深度解析与合理运用
  • 探索Stream流:高效数据处理的秘密武器
  • TOGAF 企业架构介绍(4A架构)
  • [javascript]取消异步请求
  • 26考研——中央处理器_指令执行过程(5)