STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0”

使用字符数组

使用STM32的串口发送数据,核心代码如下:

char str[] = "hello world!\n\r";

while(1)
{
	HAL_UART_Transmit(&huart2, str, sizeof (str), 10);
	HAL_Delay(1000);
}

str[],PC端用串口调试助手接收到的数据如下:
在这里插入图片描述
多出一个结束符“\0”。

原因:《C程序设计》来说,字符串常量是由一对双引号括起的字符序列,区别于字符常量的单引号。在C中,没有专门的数据类型用于存放字符串常量,但可以用字符数组存放一个字符串常量。这点是我们经常使用,但是容易疏忽的一点。再者就是其存储特点,首先字符串常量所占用的内存字节数等于字符串常量的字节数+1(C标准规定是这样,一般使用也是这样,当然也有特殊情况,即字符串常量结束无’\0’)。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/FireStarway/article/details/8773935

所以:char str[] = “hello world!\n\r”;C语言编译时,在末尾添加了结束符“\0”,实际存储等效于
char str[] = {‘h’,‘e’,‘l’,‘l’,‘o’,’ ‘,‘w’,‘o’,‘r’,‘l’,‘d’,’!‘,’\n’,‘\r’,‘\0’};
sizeof(str) = 15; 而不是14
如果要去掉末尾的结束符“\0”,可以指定字符长度
char str[14] = “hello world!\n\r”;

使用printf,string

STM32的C编程时,没有string类型,可以用字符串数组来表示
const char *str = “Hello world!”;
char str[] = “Hello world!”;

采用C标准库<stdio.h>中的printf函数输出时,不会在str后添加结束符“\0”,代码如下

char str[] = "hello world!\n\r";

while(1)
{
	printf(str);
	HAL_Delay(1000);
}

PC端串口输出
在这里插入图片描述

参考

  1. 编写STM32 C程序:字符串String转数字, 数字转字符串String
  2. 字符串数组结束符“\0“的使用探讨
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值