C++中strlen用法.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中strlen用法

C++中strlen用法 C++中strlen()用法 int main( ) { char str0[8]={a,b,c,d,e,f,i,g}; char str1[]=abcdefig; char str2[]=01234\056789 ; char str3[]=abcse\0fgkij; printf(strlen(str0)=%d\n,strlen(str0)); printf(strlen(str1)=%d\n,strlen(str1)); printf(strlen(str2)=%d\n,strlen(str2)); printf(strlen(str3)=%d\n,strlen(str3)); } 请问输出什么? 我用vc++6.0运行结果为: strlen(str0)=11 strlen(str1)=8 strlen(str2)=9 strlen(str3)=5 str0为什么会是11,和str1输出有什么区别?str2和str3同样的\0,输出的效果却不同,请问这是什么原因造成的 || 需要明确的第一点,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符\0为止,然后返回计数器值。 例如以下代码片断理论上也是可以编译通过的: char str[]=abcdefg; printf(%d\n,strlen(str[5])); 结果应当为2。 该例中,strlen从字符str[5]即f开始计数,当到达g之后遇到\0并停止计数。因此结果为2。 || str2和str3的主要区别就在于C/C++字符串中,允许形如“\056”这样的所谓转义字符存在,它们仅表示一个字节位(byte),一般用于输出无法直接通过键盘输入的字符。 || str0的sizeof为8,导致没有\0结束,因此strlen的返回是不可预期的。 str1的sizeof实际上是9,会自动加\0结束。 str2的\056会被解释成8进制数056表示的字符,因此strlen是9 str3的\0会被解释为结束符 C++ strlen 与 sizeof 的深度认识 一、由几个例子说开去。 第一个例子: char* ss = 0123456789; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针 sizeof(*ss) 结果 1 ===》*ss是第一个字符 char ss[] = 0123456789; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(*ss) 结果 1 ===》*ss是第一个字符 char ss[100] = 0123456789; sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1 strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前 int ss[100] = 0123456789; sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4 strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以\0结尾的 char q[]=abc; char p[]=a\n; sizeof(q),sizeof(p),strlen(q),strlen(p); 结果是 4 3 3 2 第二个例子: class X { int i; int j; char k; }; X x; coutsizeof(X)endl; 结果 12 ===》内存补齐 coutsizeof(x)endl; 结果 12 同上 第三个例子: char szPath[MAX_PATH]   如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(void fun(char szPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小) 二、sizeof深入理解。 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以\0结尾的。sizeof还可以用函数做参数,比如: short f(); printf(%d\n, sizeof(f())); 输出的结果是s

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档