欢迎来到天天文库
浏览记录
ID:40004797
大小:558.12 KB
页数:100页
时间:2019-07-17
《[计算机软件及应用]c语言程序设计现代方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1第13章字符串(Strings)引言这一章包括字符串常量(stringconstants,或者literals)和字符串变量(stringvariables)字符串是以特殊字符——空字符——结尾的字符数组C库提供了用于操作字符串的一系列函数2字符串字面量(StringLiterals)字符串字面量(stringliteral)是用一对双引号括起来的字符序列"Whenyoucometoaforkintheroad,takeit."字符串字面量可以像字符常量一样包含转义序列转义字符常出现在printf函数和scanf函数的格式串例如,下面字符串中的
2、每个字符导致光标前移到下一行"CandyIsdandyButliquorIsquicker.--OgdenNash"结果:CandyIsdandyButliquorIsquicker.--OgdenNash3延续字符串字面量‘’字符可以用于延续一个字符串从一行到下一行,如:printf("Whenyoucometoaforkintheroad,takeit.--YogiBerra");总的来说,可用’’字符连接两行或者多行成为一行4延续字符串字面量C语言提供了处理长字符串字面量更好的方法当两个或则多个字符串字面量相邻
3、时,编译器会将它们连接成一个字符串这一规则允许我们把一个字符串字面量拆分到多行,如:printf("Whenyoucometoaforkintheroad,takeit.""--YogiBerra");5字符串字面量的存储当编译器遇到一个长度为n的字符串字面量时,给该字符串分配n+1个字节的内存空间该内存空间将存放字符串中的字符,外加一个额外的空字符,用于标志字符串的结束空字符是一个所有比特全为0的字节,用转义序列 表示6字符串字面量的存储字符串字面量“abc”是以四个字符的数组来存放的,如图所示:字符串“”则以单个空字符的数组来存储的7字符串
4、字面量的存储由于字符串字面量是以数组的方式存储的,编译器把把字符串字面量以char*来处理printf和scanf接收char*的值作为它们的第一个参数下面的调用传递“abc“的地址给printf函数printf("abc");8字符串字面量的操作可以在任何C语言允许使用char*指针的地方使用字符串字面量char*p;p="abc";这个赋值操作不是复制“abc”中的字符,而仅仅是使p指向字符串的第一个字符9字符串字面量的操作C语言允许对指针添加下标,因此可以给字符串字面量添加下标charch;ch="abc"[1];ch的新值则为字符b.把0
5、到15转换为等价16进制数字的函数:chardigit_to_hex_char(intdigit){return"0123456789ABCDEF"[digit];}10字符串字面量的操作对字符串字面量的操作会导致未定义的行为:char*p="abc";*p='d';/***WRONG***/试图修改字符串字面量的程序可能会导致程序崩溃或者不确定的行为11字符串字面量vs字符常量包含单个字符的字符串字面量与一个字符常量是不一样的“a”是以指针表示的‘a’是以整数表示的对printf的合法调用为printf("");非法的调用:printf('
6、');/***WRONG***/12字符串变量任何一维字符数组均可以用于存储字符串字符串必须以空字符结尾这种方法带来的问题:很难说明一个字符数组是一个字符串.字符串处理函数还是必须小心处理空字符求字符串的长度需要搜索空字符13字符串变量如果字符串变量需要存放80个字符,对应的字符数组必须声明为80+1个:#defineSTR_LEN80…charstr[STR_LEN+1];额外增加的1用于给字符串结束符留出空间定义一个宏来表示80,然后采用+1的方式来定义数组是一个常见的实践14字符串变量当声明字符串变量的时候,确保给空字符留出空间否则程序
7、运行时可能造成不可预料的结果字符串的实际长度取决于字符串结束符的位置长度为STR_LEN+1的字符数组可以存放长度为0到STR_LEN的字符串15初始化字符串变量声明一个字符串的同时可以初始化该字符串:chardate1[8]="June14";编译器会自动增加一个空字符,这样即可以把字符数组date1作为字符串:在初始化这种情况下,“June14”不是一个字符串字面量C把这种形式作为数组初始化器的缩写.16初始化字符串变量如果初始化器太短而不能填满整个字符串变量,编译器会在后面增加额外的空字符:chardate2[9]="June14";dat
8、e2表示为:17初始化字符串变量字符串变量的初始化器不能超过该字符串的长度,但是可以一样长:chardate3[7]="June14";
此文档下载收益归作者所有