c语言字符串基本概念(易错!!)

问题0:字符串如何定义?

答:  在定义时赋值有三种方式。  也可以直接定义char s[5];不赋值

char s[5]=”SYSU”;  

char s[5]={‘S’,’Y’,’S’,’U’};  

char s[]=”SYSU”;

Tips: 1. 只有在定义时才能整体赋值一个字符串,后面只能逐位赋值。

比如 char s[5];  s[5]=”SYSU”; 不行。 后面想赋值必须要s[0]=’S’; s[1]=’Y’; ……这样了

  1. char s[]这种不写明空间长度的字符串,在定义时必须有赋值,否则编译错误。且它定义的空间长度就是它被赋值的字符串长度。

问题1:什么时候字符串末尾会自动添加结束符’\0’什么时候不会?

答:

如果你直接输入,或者用char s[5]=”SYSU”这种方式来定义,就会被在最后自动添加结束符。

如果你一位一位去依次赋值,或者定义时这样写:char s[5]={‘S’,’Y’,’S’,’U’},就不会自动在最末尾添加结束符。

Tips:结束符也占空间,所以如果定义char s[4]=”SYSU”会出错,因为自动添加的结束符没地方存了。

问题2:结束符有什么好处?

答:

只有包含结束符的字符串才能用各种字符串函数、以及直接进行整体的输出。

比如有了结束符才能直接printf(“%s”,str); 不然只能用循环挨个输出每一位。

实际操作中很多时候我们是一位一位去赋值字符串的,这是末尾不会自动添加结束符,我们最好手动添加一下。比如已知最后一位是n,我们就str[n+1]=’\0’;手动添加了结束符。

问题3:字符串长度怎么计算?

答:

两种方法。

  1. strlen()函数,它会计算从开头到第一个’\0’为止的长度,长度不包含’\0’。(所以前面说有结束符的作用)  (!!用任何字符串相关的函数记得要开头文件string.h)
  2. sizeof(str)/sizeof(str[0]);(一般不使用,可能在理论题中出现)

   它计算的是你定义的总长度大小。

   比如char s[10]=”SYSU”经过它计算就是10。

   char s[]=”SYSU”经过它计算是5。([]没规定位数,由右值决定定义几位。包括了结束符)

问题4:怎么读入中间包含空格的字符串?

答:

scanf读入字符串是遇到空格或换行就停止读入。

  可以选择用gets()读入,它会读入一整行字符串无论中间是否有空格。

问题5:怎么判断两个字符串是否相等?

答:

不能直接s1==s2判断。

可以循环逐位判断,也可以用strcmp()函数判断。

strcmp(s1,s2) 如果两者相等则返回0

猜你喜欢

转载自blog.csdn.net/jz_terry/article/details/128227310