039 n 039 在c语言中的作用,C语言深度学习之'\0'的注意事项

C语言深度学习之’\0’的注意事项

判断字符串是否已经到达末尾

在C语言中,’\0’是字符串的结束符号,一般由编译器自动加上。所以,!=’\0’可以用于使得读取字符串到末尾。

字符串数组,字符数组初始化,赋值问题

举个例子

#include

int main()

{

char str[]={"hello"};

//实际输入情况为hello'\0',此时这个0为编译器自动加上的

}

所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 在拷贝字符数组str中的字符串时,串结束标志’\0’也一同拷贝。

———————————————————————————————————————————————

但是也有一些例外情况发生。比如,当数组长度不够。假设我们指定了数组长度。

#include

#define N 5

int main()

{

char str[N];

str[N]={"hello"};

//由于字符串的长度为5,所以会造成最后信息的丢失,即'\0'丢失

}

———————————————————————————————————————————————

另外,当我们进行数组赋值时,如果把每个字符单独用引号括起来,也会丢失’\0’。如果想要以’\0’结尾,则必须按照下图代码编写。

#include

#define N 5

int main()

{

char str[N];

str[N]={'h','e','l','l','o'};

//这种赋值方式会使得结尾没有以'\0'结尾

//如果想要以\0结尾,则可以采用以下两种方式

/*sample1

str[]={'h','e','l','l','o','\0'};//手动添加

*/

/*sample2

str[6]={'h','e','l','l','o'};//预留一个给'\0'的空位

}

上示可知,’\0’同样是一个字符,并且需要占用一个空间。

关于strlen函数的应用

在字符串中‘\0’代表空字符,‘\0’ASCII值为0. 所以可认为‘\0’ == 0。

strlen函数工作机理:从第一个字符开始计算字符串中字符数,直到遇到空字符,然后返回空字符前字符总个数。

根据情况分析:

1、char * str1 = “abc”;

strlen(…) = 3;

字符串"abc",没什么好说的,系统自动在该形式表达出的字符串末尾加上空字符。 所以为3。

———————————————————————————————————————————————

2、char * str2 = “ab\0c”;

strlen(…) = 2;

提一下第1个字符串"abc"相当于 “abc\0”,即系统把 ‘\0’ 当成一个整体字符来识别成空字符,而不是按照 ‘\’ 与 ‘0’ 两个字符对待。 所以遇到第02个字符串 ‘ab’ 后的 ‘\0’ 时,strlen函数认为已经到了字符串的结尾。

———————————————————————————————————————————————

3、char * str3 = “ab\0c”;

strlen(…) = 5;

此时第二个斜杠被第一个斜杠转义,’\0’ 相当于字符’\‘与字符’0’(第二个’\‘被第一个’\‘转义为独立字符 ‘\’, 而不是把第二个 ‘’ 当成一个 转义字符 与 0 合为’\0’)。

———————————————————————————————————————————————

4、char * str4 = “abc0c”

strlen(…) = 5;

虽然说过 ‘\0’==0,可是在字符串中的’0’, 代表字符’0’ 而不是数字0. 因此不终止strlen计算个数。

———————————————————————————————————————————————

5、char arr0[5] = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’};

strlen(…) = 不确定;

这是一个字符数组,他里面存放的并不是字符串 (因为无’\0’),只是一系列字符

因为最后无空字符,所以strlen一直寻找直到遇到第一个空字符,此时结果不可预知。

———————————————————————————————————————————————

6、char arr1[5] = {‘1’, ‘2’, ‘3’, ‘4’, ‘\0’};

strlen(…) = 4;

因为第五个元素为’\0’

———————————————————————————————————————————————

7、char arr2[5] = {‘1’, ‘2’, ‘3’, ‘4’, 0};

strlen(…) = 4;

因为数字0 恒等于’0’。

———————————————————————————————————————————————

8、char arr3[5] ={‘0’, ‘0’, ‘0’};

strlen(…) = 3;

前三个元素为字符‘0’ != 数字0 (’\0’),因为部分初始化,数组剩下元素被设置为数字0,因此第四个元素为0 恒等于’\0’,终止,所以为3(数组声明后不初始化,里面值为随机值,部分初始化后,未被初始化部分自动被初始化为0)。

e3b8c8cf3b34d4f4e9698ab00be4804f.png

de638df49f1d5a3342eecff86bcb011e.png

旭日长空

发布了1 篇原创文章 · 获赞 0 · 访问量 57

私信

关注

标签:字符,注意事项,空字符,C语言,char,str,深度,字符串,strlen

来源: https://blog.csdn.net/xingranzhihuo/article/details/103952661

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值