200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C语言字符串和字符串结束标志

C语言字符串和字符串结束标志

时间:2021-07-11 06:13:50

相关推荐

C语言字符串和字符串结束标志

1.在C语言中,是将字符串作为字符数组来处理的。

2.C语言规定了一个“字符串结束标志”,以字符’\0’作为结束标志。如果字符数组中存有若干字符,前面九个字符都不是空字符(‘\0’),而第十个字符是’\0’,则认为数组中有一个字符串,其有效字符为9个。也就是说,在遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串。在实际工作中,人们往往关心的是字符串的有效长度而不是字符数组的长度。

注意:C系统在用字符数组存储字符串常量时会自动加一个’\0’,作为结束符。

3.在程序中往往依靠检测’\0’的位置来判断字符串是否结束,而不是根据字符数组的长度来决定字符串的长度。

但是在定义字符数组的时候应该估计实际字符串长度,保证数组长度始终大于字符串的实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应该是数组长度大于最长的字符串的长度。

说明:'\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不用做。用它来作为字符串结束的标志不会产生附加的操作或增加有效字符,只起一个辨别的标志作用。

4.补充一种字符数组初始化的方法:用字符串常量来使字符数组初始化。例如:

char []={"I am happy"};

可以直接写成

char c[]="I am happy";

这两个初始化等价,数组的长度都是11,因为字符串常量的最后由系统加上一个’\0’。

但是,下面这种情况,两个初始化是不等价的:

char c[]={'I',' ','a','m',' ','h','a','p','p','y','\0'};

不与下面的等价

char c[]={'I',' ','a','m',' ','h','a','p','p','y'};

前者长度为11,后者长度为10。

5.字符数组并不要求它的最后一个字符为’\0’,甚至可以不包含’\0’。是否需要加’\0’,完全根据需要决定。

包含’\0’:

int main(){char c[] = {"C program.\0" };printf("%s", c);return 0;}

不包含’\0’:

int main(){char c[] = {"C program." };printf("%s", c);return 0;}

结果都是:

这是因为"C program."作为一个字符串,末尾默认有一个’\0’。

6.由于系统在处理字符串常量存储时会自动加一个’\0’,因此,为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中也常常人为加上一个’\0’。

int main(){char c[] = {'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};printf("%s\n", c);return 0;}

结果为:

这是因为该字符数组中没有结束标志所以打印出来一些其他的随机值。

给字符数组后面加上’\0’之后:

int main(){char c[] = {'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.','\0'};printf("%s\n", c);return 0;}

结果为:

7.定义以下的字符数组:

char c[] = {"C program." };

由于系统自动在字符串常量的最后一个字符后面加了一个’\0’,因此,c数组的存储情况如下:

若想有一个新的字符串代替原有的字符串"C program.",如从键盘输入"Hello"分别赋给c数组中前面5个元素。如果不加’\0’的话,字符数组中的字符如下:

新字符串和老字符串连成一片,无法区分开。输出字符数组中的字符串,如下:

int main(){char c[] = {"C program." };for (int i = 0; i < 5; i++){scanf("%c", &c[i]);}printf("%s", c);return 0;}

如果在"Hello"后面加上’\0’,它取代了第6个字符’g’。在数组中的存储情况如下:

‘\0’是字符串结束标志,在输出字符数组中的字符串时,遇到’\0’就停止输出,因此只输出字符串"Hello"。而不会输出"Hellpgram."。

int main(){char c[] = {"C program." };scanf("%s", c);printf("%s", c);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。