- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串数组的初始化及sizeof和strlen
1.首先我们来了解一下sizeof和strlen的概念即区别:
sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头, 中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符\0为止,然后返回计数器值。
它们的区别是:
3.1.从功能定义上,strlen函数,用来求字符串的长度,sizeof函数是用来求指定变量或变 量类型等所占用内存的大小
3.2.sizeof是运算符,而strlen是C库函数strlen只能用char*做参数,且以\0结尾的;
对于静态数组处理:
char str[20]=0123456789;
strlen(str)=10; //表示数组中字符串的长度
sizeof(str)=20; //表示数组变量分配的长度
对于指针处理:
char *str=0123456789;
strlen(str)=10; //表示字符串的长度
sizeof(str)=4; //表示指针变量的所占内存大小
sizeof(*str)=1; //表示0这个字符变量的所占内存大小
2.我们再来看看看下面的代码:
#include iostream.h
#includestring.h
int main()
{
char a[]={a,b,c};
cout字符串a:aendl;
cout数组的大小:sizeof(a)endl;
cout数组的大小:strlen(a)endl;
coutendl;
char b[5]={ a,b,c};
cout字符串b:bendl;
cout数组的大小:sizeof(b)endl;
cout数组的大小:strlen(b)endl;
coutendl;
char c[5]=wang;
cout字符串c:cendl;
cout数组的大小:sizeof(c)endl;
cout数组的大小:strlen(c)endl;
coutendl;
char d[5]={k,r,t,t,s};
cout字符串d:dendl;
cout数组的大小:sizeof(d)endl;
cout数组的大小:strlen(d)endl;
coutendl;
//下面的定义定义会又编译错误,因为wangw会自动添加结束标识‘\0’,
//此时字符串的长度是6,而定义是的长度是5,
/*char e[5]=wangw;
cout字符串e:eendl;
cout数组的大小:sizeof(e)endl;
cout数组的大小:strlen(e)endl;*/
//会有编译错误;声明指针变量的时候并没有为其开辟空间,
//char *f={h,e,l,l,o};表示分别把字符、、、放在指针变量g所指向的空间
//但并没有此空间所以出错
/*
char *f={h,e,l,l,o};
cout字符串f:fendl;
cout数组的大小:sizeof(f)endl;
cout数组的大小:strlen(f)endl;
coutendl;
*/
//下面的代码为什么没有出错呢???原应很简单:首先系统会把字符串放在系统的
//静态存储区并把字符串在静态存储区的首地址赋给在栈里的指针变量
char *g=hello word;
cout字符串g:gendl;
cout数组的大小:sizeof(g)endl;
cout数组的大小:strlen(g)endl;
coutendl;
return 0;
}
结果:
字符串a:abc汤
数组的大小:3
数组的大小:7
字符串b:abc
数组的大小:5
数组的大小:3
字符串c:wang
数组的大小:5
数组的大小:4
字符串d:krtts烫蘷ang
数组的大小:5
数组的大小:12
字符串g:hello word
数组的大小:4
数组的大小:10
Press any key to continue
解析如下:
char a[]={ ‘a’,’b’,’c’};表示给数组的第一,第二,第三个字节的元素是a,b,c,而此时的数组的大小不是知道的,也就是系统已经在栈里至少分配了3个字节大的内存,要是数组在栈里是连续存放的,因此数组的后面还有多少个字节谁也不知道,
文档评论(0)