




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言-字符串麦洛克菲-周扬荣任何一个程序中,至少有20%的代码是在处理字符串字符串定义所谓字符串是由零个或多个字符组成的有限序列。C语言字符串可以定义为:”\0”。从定义的形式可以看出,C语言的字符串是以’\0’结尾的(换句话说:只要遇到’\0’,字符串就结束了)。程序在存放字符串的时候,会自动在字符后面加上一个’\0’作为结尾。比如:“Thisis
astring”—由引号包含起来的。那么这个字符串的实际存放形式为:虽然肉眼看不到字符串结尾的那个’\0’,但是在存储空间,在末尾却可以看到’\0’是存在的。所以,字符串实际上也是一个以’\0’作为最后一个元素的字符数组。“hello\0world”字符串常量“Hello
world”“a”//注意与’a’的区别“”“0”//’0’和’\0’,0,NULL“my
name
is\“mallocfree\”!”“D:\\MallocFreeIBM\\language\\1c\\6-string\\”char
*str
=
“hello
world”;char
str[]=
“hello
world”;“123”<—>123转义字符C语言字符串是由引号包含,且以零结尾的由零个或多个字符组成的有限序列。那么,假如双引号本身也是字符串中的一个字符,怎么办呢?比如下面这句话:This
is
a
“real”
special
dream如果要用一个双引号来把这句话包含起来,就变成了:“This
is
a
“real”special
dream”//错误“This
is
a
\“real\”special
dream”//正确常见的转义字符“C:\Doc\1.txt”
’“C:\\Doc\\1.txt”
’C’,’:’,’\D’,’o’,’c’,’\1’,’.’,’t’,’x’,’t’,’\0’C’,’:’,’\’,’D’,’o’,’c’,’\’,‘1’,’.’,’t’,’x’,’t’,’\0’\1270127-->"\127"\x3a0x3a-->"\x3a""there
is
an
\'e\'
in
\"hello\""程序中使用字符串:/*1*/char
*str
=
“this
is
a
string”;/*2*/char
str2[]=
“this
is
a
string”;/*3*/char
str3[100]
=
“this
is
a
string”;/*4*/char
str4[]=“hello\0world”语句1将”thisisastring”赋值给了字符指针str。此时,str的值为”thisisastring”的第一个字符的地址。实际上,”this
isastring”这个常量字符串存储在C语言程序的常量区。而str即指向了存储这个常量字符串的首地址。语句2会将常量区中的”thisisastring”拷贝到数组里面。并且数组的长度将为”this
is
a
string”(包含’\0’)的长度。语句3会将常量区中的”this
is
a
string”拷贝到数组里面。并且数组的长度将为
100个字节。语句3和语句2的区别是语句2没有指明数组的长度,那么数组的长度就是字符串的长度。对于上面的3个字符指针变量,分别使用sizeof和strlen的计算结果又是什么呢?sizeof(str)=为指针的长度,所以在X86上是4,在X64上是8。sizeof(str2)=17。str2数组的长度,但str2没有显示指出数组的长度,而是按照分配给它的字符串的长度来分配。所以,值为17。sizeof(str3)=100。Sizeof计算的是str3数组的长度,所以结果为100。strlen(str)=16。Strlen计算的是字符串的字符个数(不含’\0’)。strlen(str2)=16。原因同上。strlen(str3)=16。原因同上。程序中使用字符串char
*p
=
(char
*)malloc(128);if
(p
==NULL)return;memset(p,
0,
128);memcpy(p,
“hello
world”,
strlen(“helloworld”)+1);这样,以p为首地址的内存中将存放着”helloworld”这个字符串。多字节字符串和宽字符字符串在C语言中,还应该区分一个多字节字符串和宽字符字符串的概念。在多字节字符串中,每个字符的编码宽度都不等,可以是一个字节,也可以是多个字节。比如:char
*
str=“Hello,
world!您好,世界!”。上面是一个多字节字符串。其中的英文字符占一个字节,而中文字符占2个字节。而宽字符串中,每个字母占用的字节数是一样的。比如:wchar_t
*wstr=L“Hello,world!您好,世界!”上面是一个宽字符串。其中每个字符,无论英文字母还是中文字符还是结尾的零(’\0\0’),都占2个字节(UNICODE编码)。可以调用wctomb()等函数将宽字符串与多字节串进行相互转换。字符串常见操作strcmp:比较一个字符串是否相等,而且大小写敏感,相等返回零
stricmp:比较一个字符串是否相等,而且大小写不敏感strncmp:比较2个字符串前N个字符,大小写敏感
strnicmp:
比较2个字符串前N个字符,大小写不敏感字符串遍历char
*str=“hello
world!”;while(*str!=‘\0’){printf(“%c”,
*str);str++;}for(;*str!=‘\0’;str++){printf(“%c”,
*str);}for(int
i=0;
str[i]!=‘\0’;i++){printf(“%c”,
str[i]);}字符串库函数应用strlenstrcpy/strncpystrcmp/stricmp/strnicmpstrcat/strncatstrchr/strrchrstrstrstrtokatofatoiatolatollstrcpy_sstrcat_sscanf_swcslenwcscpy..._tcslen_tcscpy自己实现字符串操作strstrstrcmpstrlenstrcpy…字符串与字符数组char
name1[]={‘h’,’e’,’l’,’o’};char
name2[]={‘h’,’e’,’l’,’o’,’\0’};char
name3[]=“hello”;最后一个字符是’\0’的字符数组就是字符串。
所以name1是字符数组,不是字符串。name2和name3都是字符串。字符串数组char
name1[3][20]={“tom”,”jack”,”david”}char
*name2[3]={“tom”,”jack”,”david”}sizeof(name1)?sizeof(name2)?作业下面的定义有什么区别?sizeof,strlen的值分别是?char
*s1=“Helloworld”;char
s2[]=“Hello
wor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医药咨询采购合同范本
- 仓储货架合同范本
- 劳动合同范本医疗
- 会计临聘用合同范本
- 展厅工程合同范本
- 出货协议合同范本
- 义卖赞助合同范本
- 北京和杭州租房合同范本
- 劳务用工劳务合同范本
- 出售高端养老房合同范例
- 电子商务数据分析基础(第二版) 课件 模块1、2 电子商务数据分析概述、基础数据采集
- YB-T+4190-2018工程用机编钢丝网及组合体
- 高大模板安全施工施工安全保证措施
- 比亚迪公司应收账款管理的问题及对策分析
- 【高考真题】2024年新课标全国Ⅱ卷高考语文真题试卷(含答案)
- 委托办理报废汽车协议书
- 旅游服务质量评价体系
- 义乌市建筑工程质量通病防治措施100条(2022版本)
- 苏教版(SJ)《四年级下册数学》补充习题
- 体育足球篮球排球体操教案
- 统编版高中政治必修3必背主观题
评论
0/150
提交评论