美文网首页C++C++
数组以及字符串的sizeof(),strlen(),以及stri

数组以及字符串的sizeof(),strlen(),以及stri

作者: 爱秋刀鱼的猫 | 来源:发表于2017-11-08 09:02 被阅读11次

1、sizeof()--求所占的字节数

字节数就是指数据存在计算机里花了多少字节,比如说一个int类型所占字节数是4,char类型所占字节数为1;int* (整型指针所占字节数为4),char*(字符指针所占字节数也为4)
有了这个背景,那么以下的程序就比较好理解了:

(1)、对于整型字符型数组
int A[]={1,4,5,2,8,6,0};
//求整型数组A所占的字节数
int i=sizeof(A);//i表示整型数组A所占的总空间的字节数
cout<<” i=sizeof(A)= ”<<i<<endl;//此时,i=7*4=28
i=sizeof(A)/sizeof(int);//此时i表示数字数组的元素个数 i=7
char B[]={'a','b','c'};
i = sizeof(B);
cout<<i<<endl;//结果为3*sizeof(char)=3
//求字符数组的元素个数
i=szieof(B)/sizeof(char);           //结果为3
char C[]="abcde";
i = sizeof(C);
cout<<i<<endl;//结果为6*sizeof(char)=6,最后一个为’\0’
(2)、对于整型或字符型指针
int *p;
int A[]={1,2,3,4,5};
p=A;
int i= sizeof(p);// i=4;p为整形指针,大小为定值为4
int i = sizeof(*p);//i=4;此时i就是p所指的整型数组A的第一个元素A[0]的所占字节数

2、strlen()---字符数组或者字符串所占的字节数

strlen()函数可以看作是一个计数器,从某一位置开始,一直到碰到第一个字符串结束符‘\0’为止。它返回的是字符串或者字符数组的实际长度。

(1)字符数组
char A[4]={'a','b','\0','c'};
I = A.strlen();//I为2,因为它遇到‘\0’就结束了。
char *str="abcde"; 
i=strlen(str);           //i为5 
cout<<i<<endl; 
(2)字符指针
char C[]={"abcdef"};
char *p1=C;
i=strlen(p1); //结果为6
cout<<i<<endl;

⚠️注意:

char B[]={'a','f','g','h'};
i = B.strlen();//这时候是会报错的,因为B没有指定内存分配大小。

char D[5]={'a','c','q','f','w'};//这样再用strlen求其长度也会造成错误,当D[]之中的数大于5才不会造成错误。
cout<<i<<endl;

可以这么理解,strlen()这个计数器一直没有遇到它生命当中的那个人'\0',并且上帝也没有给它一个进度条,所以它对于这样的生活是无比绝望的。

(3)其他类型
class X 
  { 
  int i; 
  int j; 
  char k; 
  }; 
  X x; 
cout<<sizeof(X)<<endl; //结果 12 ===>内存补齐 
cout<<sizeof(x)<<endl; //结果 12 同上 
class X 
  { 
  static int i; 
  int j; 
  char k; 
  }; 
  X x; 
cout<<sizeof(X)<<endl; //结果 8 ===>static这一静态变量是存放着全局数据区的,而sizeof 计算的是栈中分配的大小
(4)空类
class A
{};
class A2
{};
class B:public A
{};
class C:public virture B
{};
class D:public A,public A2
{};
int main()
{
cout<<"sizeof(A): "<<sizoef(A)<<endl;
cout<<"sizeof(B): "<<sizeof(B)<<endl;
cout<<"sizeof(C): "<<sizeof(C)<<endl;
cout<<"sizeof(D): "<<sizeof(D)<<endl;
return 0;
}

结果:1 1 4 1
表明空类所占空间为1个字节,单一继承的空类空间也为1,多重继承的空类空间还是1,但虚继承涉及虚表(虚指针),所以sizeof(C)为 4。

3、sizeof()和strlen()的区别

sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。

4、c++当中字符串string的长度

string str1=”cbdsj”; 
int i=str1.length(); 
cout<<”i=str1.length()= ”<<i<<endl; //结果为5
I=str1.size(); 
cout<<”str1.size()= ”<<i<<endl;  //结果为5

总的来说:对于c++中的size()和lengt()没有区别。
⚠️注意:

#include <iostream>
#include <string>
using namespace std;  
int main()
{
    string str("how soft works行");
    cout << "Length of str : " << str.length();
    return 0;
}

大家可以把这段程序自己编译运行一下,可能会得到不同的结果。
我的结果是:17,但是有些人的结果是16。这个的原因是因为字符串里出现了中文。和开发环境有关系了,UTF8是3个字节一个汉字的,那么就是17,ANSI就是16。

总结一下:

  • sizeof()是运算符,其他三个都是函数,其中size()和length()是C++string里面涉及到的函数,在STL当中会经常使用到。
  • strlen()遇到‘\0’,才会停止计数
最后,很感激这篇文章的作者,把这四个“长度”讲得那么清晰明了

http://blog.sina.com.cn/s/blog_67d069a90100ui4p.html

相关文章

  • 数组以及字符串的sizeof(),strlen(),以及stri

    1、sizeof()--求所占的字节数 字节数就是指数据存在计算机里花了多少字节,比如说一个int类型所占字节数是...

  • sizeof(cha[])和strlen(cha[]),以及st

    输出: strlen不计算'\0' ,sizeof计算'\0' 定义char数组的方式: char cha[]="...

  • C语言字符串处理函数

    1求字符串的长度 运行结果:strlen(str1)=38,sizeof(str1)=4strlen(str1)=...

  • 面试题

    sizeof 和strlen的区别 1.首先,sizeof()是用来计算字符串或其他对象所占内存的字节数;char...

  • 2017C++面试题

    1.sizeof和strlen的区别 sizeof和strlen有以下区别:  sizeof是一个操作符,str...

  • c语言篇2号

    上午老师讲了许多的新的内容,字符串数组的输入输出,定义以及一些新的函数,strlen字符长度函数,strcpy复制...

  • C++复习--点点知识点

    1.strlen与sizeof的区别? a.strlen是一个函数,sizeof是一个运算符; b.strlen返...

  • c语言计算字符串长度

    注意: strlen()函数求出的字符串长度为有效长度,既不包含字符串末尾结束符 ‘\0’; sizeof()操作...

  • 算法刷题常用

    字符串 字符串长度 strlen计算长度时不计\0.sizeof()计算'\0' 由于字符串以'\0'结尾,定义一...

  • 12月2日,3日—c语言篇

    2日上午老师讲了许多的新的内容,字符串数组的输入输出,定义以及一些新的函数,strlen字符长度函数,strcpy...

网友评论

    本文标题:数组以及字符串的sizeof(),strlen(),以及stri

    本文链接:https://www.haomeiwen.com/subject/rsdsmxtx.html