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;
    }

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/8335IT/p/5916627.html
Copyright © 2011-2022 走看看