字符串数组结束符“\0“的使用探讨
来源:互联网 发布:网络歌手mv下载 编辑:程序博客网 时间:2024/05/21 06:49
今天在创建一个字符串串口连续发送函数的时候,在其中对字符串数组是否发送完进行判断,按照以前的惯性使用了这样一句:
while(*(str+cnt)!='\0')
{
U0_Transmit(*(str+cnt++));
}
这样的写法想必很多人都写过,这也确实是判断一个字符串是否到了结束的好办法。不过更加细致地对其进行一下研究,有助于我们在使用字符串的这个特点时,能用得更好而不是畏手畏脚。
首先来对字符串常量进行一下介绍:
根据谭浩强的《C程序设计》来说,字符串常量是由一对双引号括起的字符序列,区别于字符常量的单引号。在C中,没有专门的数据类型用于存放字符串常量,但可以用字符数组存放一个字符串常量。这点是我们经常使用,但是容易疏忽的一点。再者就是其存储特点,首先字符串常量所占用的内存字节数等于字符创常量的字节数+1(C标准规定是这样,一般使用也是这样,当然也有特殊情况,即字符创常量结束无'\0')。下面来举例说明
将一个字符串常量赋给数组:
unsigned char str1[ ]={"hello,world!"};;
而实际上,该字符数组str1在内存中的实际存放情况为:
h e l l o , w o r l d !
这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。
把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。
但是……也有一些例外情况发生。
比如,当数组长度不够。假设我们指定了数组长度,如:
u8 str1[13]={"cxjr.21ic.org"};
由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。
另外,如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望数组以'\0'结束,则要么写成:
u8 str1[]={"cxjr.21ic.org"};
要么写成(人工添加'\0'):
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'};
要么写成(故意给数组预留一个空位):
u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
通过这样的方式就可以避免在使用通过"\0"判断发送是否完毕的函数时陷入死循环了。
- 字符串数组结束符“\0“的使用探讨
- C 字符数组与字符串的使用及加结束符'\0'的问题
- C 字符数组与字符串的使用及加结束符'\0'的问题
- C语言字符数组与字符串的使用及加结束符'\0'的问题
- 字符串结束符使用
- 关于C语言中'\0'结束符的探讨
- 字符串结束符'\0'
- 字符串结束符'\0'
- 字符串结束符'\0'
- 字符串有结束符\0
- 关于字符串结束符‘\0’
- 关于字符串结束符'\0'
- 数组指针使用探讨
- C语言中空格,空字符,字符数组结束符,NULL,空字符串的区别
- 一个不给定长度的字符串数组如何判断结束
- c++使用指针指向的字符串,如何判断字符串结束
- C语言中字符串结束符'\0'的讨论
- C语言中字符串结束符'\0'的讨论
- Java transient、volatile关键字
- apache动态编译和静态编译问题
- 开发中的权限管理问题(1)
- Linux下samba的安装与配置(一)
- 以太网技术发展杂感
- 字符串数组结束符“\0“的使用探讨
- ubuntu shell终端中以窗口形式打开一个文件夹
- lucene下载与安装
- apache添加扩展模块(不重新编译)
- Android2.1消息应用(Messaging)源码学习笔记(转载)
- Twitter Storm: 配置开发环境
- Flash AS3.0开发Android apk如何禁止自动翻转
- ice 注意使用点
- Android开源组件介绍:SlidingMenu