硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1058|回复: 5
收起左侧

[技术讨论] printf转义字符可以定义在字符串中?

[复制链接]

3

主题

15

回帖

24

积分

新手上路

积分
24
发表于 2024-9-28 15:15:49 | 显示全部楼层 |阅读模式
正常情况下printf("adc val = %d mV", val)一般这样使用,请问以下这种用法可以吗?会不会有什么风险
//printf输出字符串
    char *test = "num = %d mv\r\n";
    printf(test, 123);
//sprintf转换为数值至buff
    char buff[50] = {0};
    char *str = "采集到的电压为 vlot = %f V";
    sprintf(buff, str, 3.14157);



回复

使用道具 举报

3

主题

15

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-9-28 15:35:43 | 显示全部楼层
下载.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-9-29 09:23:13 | 显示全部楼层
这个测试没问题。
回复

使用道具 举报

3

主题

15

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2024-9-29 11:27:05 | 显示全部楼层
查了一些资料:
printf的格式控制字符串可以由三类字符(格式字符,转义字符,普通字符)组成。
格式字符 —— 由“%”引导,如%d、%f 等。作用是控制输出字符的格式。
转义字符 —— 转义字符按照转义后的含义输出,换行符“\n”,即输出回车。
普通字符 —— 原样输出的字符

在实际字符串存储过程中,%d其实是当做两个字符来存储的,只不过是printf把他解释为格式控制字符,而\r,\n, \t,\0这种是转义字符,针对一些不可见的字符的描述,在内存中使用1字节来存储,\r,\n, \t,\0其存储数值分别为0x0D, 0x0A,0x09, 0x00。或者转义字符可以理解为“请不要使用字面意思来理解我”


回复

使用道具 举报

102

主题

573

回帖

894

积分

金牌会员

积分
894
QQ
发表于 2024-9-29 14:26:15 | 显示全部楼层
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-11-4 14:19:06 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 16:27 , Processed in 0.044676 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表