zoukankan      html  css  js  c++  java
  • c++ sizeof,strlen, length

    #include <map>
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include<forward_list>
    #include<unordered_map>
    #include<share.h>

    using namespace std;
    int main()
    {
    char *str="gdfgjdf;";
    char str1[]="vfdvfdbdfb";//补一个‘’
    char str2[10]="fdgf";
    //char str3[4]="fdgfdgf";
    char str4[]={'g','f','d'};
    cout<<sizeof(*str)<<"***"<<sizeof(str1)<<"***"<<sizeof(str2)<<"***"<<sizeof(str4)<<endl;
    }

    *****strlen 和string.length都不算字符串结尾的

    1/11/10/3

    。。。。。。。。。。。。下边的总结的有点乱

    #include <map>
    #include <iostream>
    #include<string>
    #include <cstring>
    using namespace std;
    int main()
    {

    string str="vdfbdffdf";
    char *ptr;
    char ss[100];
    cout<<sizeof(str)<<endl;//4
    cout<< sizeof(&str)<<endl;//上边那个的别名4
    //ptr=str;//false
    ptr=ss;
    //ss=str;类型不匹配
    // ss=str.c_str();//false
    //ptr=str.c_str();//const char* !=char *

    //string--to---char* ,char[]
    //ptr=str.c_str();//错误
    int len=str.length();
    ptr=new char[len+1];
    strcpy(ptr,str.c_str());
    cout<<ptr<<endl;
    //char arr[];
    //cout<<"sizeof:arr[]"<<sizeof(arr);必须赋初值
    char arr[100];
    cout<<"空arr"<<arr<<endl;//乱码
    strcpy(arr,str.c_str());
    cout<<arr<<sizeof(arr)<<endl;//vdfbdffdf,100
    //

    char s2[100]={'a','f','w'};
    cout<<s2<<"***"<<s2[7]<<endl;//默认后边的初始化为空或者说
    ////
    char *pp;
    char sp[]="fdsfdsg";
    pp=sp;
    char *pp2="dsfsdgfs";//char数组可以直接赋值给指针
    //char sp2[]=pp2;//没初始化大小
    //char sp2[100]=pp2;//错误:数组用大括号括起来的初始化必须初始化
    //***指针不能直接赋值给数组,因为指针只是一个4字节空间变量
    char *str1;
    char *str2="fdsaaaaaaaaaaaafds";
    str1=str2;
    cout<<str2<<endl;//这个表示指针指向相同位置
    /////////
    char sp2[100];
    sp2=str2;//但是这样写就不对,只能说指针指向数组,但是不能数组指向指针
    //所以我们只能逐一赋值
    int i=0;
    while(*pp2!='')
    {
    cout<<*pp2<<"#";
    sp2[i++]=*pp2++;
    }
    cout<<"exe:"<<sp2<<"____"<<sizeof(sp2)<<endl;
    ///*******指针所指字符串是结尾,但是我们并没有对sp2结尾赋值‘'所以sp2输出会有部分乱码。
    int *p;
    *p=10;
    cout<<p<<*p<<&p<<endl;//0x28...10...ox28.....两个地址不一样
    //个人理解:第一个是常量10的地址,第二个是该地址里面的内容。第三个是指针的地址
    cout<<sizeof(p)<<sizeof(*p)<<sizeof(&p)<<endl;//4,4,4,地址占4个字节
    //下边的没有编译错误,但是不建议这样赋初值
    int a;
    int *lp=&a;
    *lp=10;
    cout<<a<<endl;//会导致程序异常不能终止(dos),但是可以编译运行出结果。
    }

     strlen

    int main()
    {
    char *str="gdfgjdf;";
    char str1[]="vfdvfdbdfb";//补一个‘’
    char str2[10]="fdgf";
    //char str3[4]="fdgfdgf";
    char str4[]={'g','f','d','','p'};
    cout<<strlen(str);
    cout<<"***"<<strlen(str1);
    cout<<"***"<<strlen(str2);
    cout<<"***"<<strlen(str4)<<endl;
    }

    8,10,4,3

    计算占用字符的个数,但是他必须要找到 才会停止计算,并且所占字符数量不包括

    int main()
    {
    char *str="gdfgjdf;";
    char str1[]="vfdvfdbdfb";//补一个‘’
    char str2[10]="fdgf";
    char str3[40];
    char str4[]={'g','f','d','','p'};
    cout<<strlen(str);
    cout<<"***"<<strlen(str1);
    cout<<"***"<<strlen(str2)<<"___"<<sizeof(str2)<<endl;
    cout<<sizeof(str3)<<endl;
    cout<<"***"<<strlen(str4)<<"**"<<sizeof(str4)<<endl;
    }

    8,10,4,10,40,3,5

    strlen 在计算所占字符个数的时候找到,不算.,,,,sizeof计算字符指针是4,计算字符数组的时候,没有初始化大小的按照后边字符多少计算比用看.若是初始化字符数组大小,比如char s[100];那sizeof(s),就是100;

    注意strlen 只能直接计算字符指针,字符数组,不能直接计算字符串,需要c-str();

    int main()
    {
    string str="fdgdfbfgb";
    cout<<strlen(str.c_str());//9
    cout<<sizeof(str.c_str());//const char *,4
    cout<<sizeof(str)<<endl;//4、、表示指针

    cout<<sizeof("dsfdsvf")<<endl;//8
    }

    int main()
    {

    char *str="fdfvdsfvbfdb";
    char s[]="fdsgdf";

    str=s;//虽然可以这样赋值,但是本质上str是一个指针,而s是一段内存,数组名可以代表指针
    cout<<sizeof(str)<<sizeof(s)<<endl;//4,7
    cout<<strlen(str)<<strlen(s)<<endl;//6,6


    }

    注意char * 和char []str转string的时候直接赋值是可以的

    int main()
    {

    char *str="fdfvdsfvbfdb";
    char s[]="fdsgdf";
    string ss(s);
    string sss(str);
    string a=s;
    string b=str;

    cout<<ss<<sss;
    }

  • 相关阅读:
    xib中Autolayout的使用
    duplicate symbol _gestureMinimumTranslation in:
    oracle数字字符串是否有非法数字
    ora-01536 space quota exceeded for tablespace
    Linux core 文件(二)
    Linux core 文件(一)
    完全卸载oracle11g步骤
    oracle11gr2 for windows 32-bit win7安装与卸载
    Oracle的几个概念:数据库名,全局数据库名,SID,实例,命名空间,schema
    cut 字符截取命令
  • 原文地址:https://www.cnblogs.com/8335IT/p/5916627.html
Copyright © 2011-2022 走看看