说明:''代表ASCII码为0的字符 , 从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干 。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志 。
对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法――即可以用字符串常量来初始化字符数组:
char str[ ]={"I am happy"}; 可以省略花括号 , 如下所示
char str[ ]="I am happy";
注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的
char str[ ];
str="I am happy";
不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘'括起来的)作为初值 。显然,这种方法更直观方便 。(注意:数组str的长度不是10,而是11 , 这点请务必记?。?因为字符串常量"I am happy"的最后由系统自动加上一个'/0')
因此,上面的初始化与下面的初始化等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','/0'};
而不与下面的等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
前者的长度是11,后者的长度是10.
说明:字符数组并不要求它的最后一个字符为'/0',甚至可以不包含'/0',向下面这样写是完全合法的 。
char str[5]={'C','h','i','n','a'};
++++++++
可见,用两种不同方法初始化字符数组后得到的数组长度是不同的 。
#include
void main(void)
{
char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};
char c2[]="I am happy";
int i1=sizeof(c1);
int i2=sizeof(c2);
printf("%d",i1);
printf("%d",i2);
}
结果:10 11
【c语言里读字符数组函数 c语言读取字符数组中字符个数】3、字符串的表示形式
在C语言中 , 可以用两种方法表示和存放字符串:
(1)用字符数组存放一个字符串
char str[ ]="I love China";
(2)用字符指针指向一个字符串
char* str="I love China";
对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量"I love China"直接赋给该字符串变量,这是不对的 。
C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str 。
两种表示方式的字符串输出都用
printf("%s",str);
%s表示输出一个字符串 , 给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据 , 然后自动使str自动加1,使之指向下一个字符... , 如此,直到遇到字符串结束标识符 " /0 " 。
4、对使用字符指针变量和字符数组两种方法表示字符串的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈 。
4.1、字符数组由若干个元素组成 , 每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)
4.2、赋值方式:
对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值
char str[14];
str="I love China"; (但在字符数组初始化时可以,即char str[14]="I love China";)
推荐阅读
- 直播间陈列摆放技巧视频,陈列直播的内容
- asp.netIIS7原理,aspnet core原理
- 拍摄相片配什么手机,拍相片最好的手机
- 新手如何做好新媒体营销工作,新手如何做好新媒体营销工作论文
- python的函数栈 python中的栈
- 8532是什么cpu,8532是什么意思爱情
- 支付宝小程序企业号,支付宝企业帐号
- a4300m换什么cpu,a4 3300cpu
- go语言各种命令 go语言执行cmd命令