STM32 字符数组结束符 “\0”
- 使用字符数组
- 使用printf,string
- 参考
使用字符数组
使用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端串口输出
参考
- 编写STM32 C程序:字符串String转数字, 数字转字符串String
- 字符串数组结束符“\0“的使用探讨