yydg.net
当前位置:首页 >> strlEn和sizEoF怎么算 >>

strlEn和sizEoF怎么算

strlen获取字符串的长度.每个中文字符占用两个字节,所以中国是strlen是2+2=4;英文字符保存一个字节,故ZG是1+1=2sizeof用于求取占用的空间.但是注意,你求取的对象不是字符串本身,而是变量本身.p和q两个变量均为指针,指针在计算机中占用4个字节,所以最后两个都是4.

明显是c语言的,strlen指字符的长度 sizeof指文件或者数据占的内存(字节)

一、sizeof sizeof()是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等. 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小. 由于在编译时计算,因此sizeof

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值.sizeof其作用就是返回一个对象或者类型所占的内存字节数.

sizeof(x) 是计算 char x[] 占内存多少字节. STRING 占 6个字节,双引号括起的"STRING" 叫字符串,隐含一个字符串结尾符号.所以总 计, 要 占 7个单元.strlen 计算字符串长度,不计入字符串结尾符 '\0'.x[0]=0; 赋给的 算术值 0 ,也就是 ASCII 码 值 0 对应 的 字符 '\0',它正好是字符串结束符号.所以 strlen() 是 0.不管 x[1],x[2],.里有什么.

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止. char aa[10];cout<<strlen(aa)<<endl; //结果是不定的 char

"ABCDEFG"是一个字符串常量,最后面是带'\0'这个字符的.char b[]={'A','B','C','D','E','F','G'};这是一个字符数组,最后面是没有'\0'这个字符的.所以sizeof(a)的值就是字符串长度+'\0'的长度是8sizeof(b)是字符数组的长度,是7strlen(a)是字符串的长度,不算后面的'\0',是7strlen(b)送b的起始地址算起,直到碰到'\0'字符为止,但是这个'\0'在那里不确定,C不检查数组越界,结果可能是15,也可能是别的值.比如用VC2008编译结果是:

① sizeof是运算符,计算数据所占的内存空间;strlen()是一个函数,计算字符数组的字符数;② sizeof可以用类型作参数;strlen()只能用char*作参数,必须是以'/0'结束 ③ 数组做sizeof的参数不退化,传递给strlen就退化为指针了; ④ sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型.该类型保证能容纳实现所建立的最大对象的字节大小

实际上这个涉及到内存了, sizeof指的是占用内存的大小,而strlen指的是字符串里面字符数,"123456\n" 字符串后面是有个隐形的 '\0' 字符的,标识字符串结束,所以在内存中占了8个字符.明白否?如果你定义的时候直接定义char buf[20]="123456\n";那么size=sizeof(buf); size=20了.

答案分别为8 因为sizeof测的是数组占用的空间,字符串后面要加一个0/7 这个是字符数组,数组中存放的就是给定的字符7 strlen测的是数组实际的非零字符的长度,他是从起始开始就算的, 遇到零 停止,0不算在内7

网站首页 | 网站地图
All rights reserved Powered by www.yydg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com