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“的使用探讨

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 02:14:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 02:14:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 02:14:01       87 阅读
  4. Python语言-面向对象

    2024-04-01 02:14:01       96 阅读

热门阅读

  1. dma123456

    2024-04-01 02:14:01       30 阅读
  2. 终于成功的编译合宙的DAP_LINK sdk

    2024-04-01 02:14:01       40 阅读
  3. 2024.3.30力扣刷题记录-二叉树学习记录2(未完)

    2024-04-01 02:14:01       43 阅读
  4. 《中华遗宝之王莽藏金之谜》

    2024-04-01 02:14:01       39 阅读
  5. chatui工具使用记录与比较

    2024-04-01 02:14:01       43 阅读
  6. python装饰器的使用

    2024-04-01 02:14:01       38 阅读
  7. COMP2017 9017

    2024-04-01 02:14:01       29 阅读
  8. [TS面试]TS中如何设计Class声明

    2024-04-01 02:14:01       38 阅读
  9. 算法练习----力扣每日一题------3

    2024-04-01 02:14:01       40 阅读