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

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

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

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

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

举个例子

#include <stdio.h>
int main()
{
   char str[]={"hello"}//实际输入情况为hello'\0',此时这个0为编译器自动加上的
}

所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 在拷贝字符数组str中的字符串时,串结束标志’\0’也一同拷贝。
———————————————————————————————————————————————
但是也有一些例外情况发生。比如,当数组长度不够。假设我们指定了数组长度。

#include <stdio.h>
#define N 5
int main()
{
   char str[N];
   str[N]={"hello"};
   //由于字符串的长度为5,所以会造成最后信息的丢失,即'\0'丢失
}

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

#include <stdio.h>
#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)。

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

猜你喜欢

转载自blog.csdn.net/xingranzhihuo/article/details/103952661
今日推荐