zoukankan      html  css  js  c++  java
  • c/c++字符数组和字符串大揭秘

    第一:写这篇文章源于我对''和“”的探讨

                  当我对char a []="";

                   int size_a=sizeof(a);    //结果为2

    当时我很纳闷字符串不是以''结束吗,然后我又测试 :

                  char a[]="b";

                  cout<<sizeof(a);        //结果为3

    再次测试:

                  

                  char a[]="";
                  cout<<sizeof(a);        //结果为4

    最后测试:

                  

                  char a[]="";
                  cout<<sizeof(a);        //结果为1

    通过测试发现字符串里的是系统自动添加,而且不管你原串里是否有;

    第二:

    示例一:int main(int argc, char *argv[])
    { char str[] = {'H','e','l','l','o'};
    char bb[]={
    'a','b','c','D'
    };
    cout<<bb<<endl;

    输出结果如下:注意每次运行输出结果最后0后面的那个字符会不一样

    输出结果

    示例二:int main(int argc, char *argv[])
    { char str[] = {'H','e','l','l','o'};
    char bb[]={
    'a','b','c','D'
    };
    cout<<str<<endl;

    输出结果如图

    为什么图一输出的结果是abcDHello*(*号表示随机字符)?我们可以推测出由于采用栈的存储结构,所以在函数中先定义的先压栈测试如下面的

    示例三:

    int main(int argc, char *argv[])
    { char str[] = {'H','e','l','l','o'};
    char bb[]={
    'a','b','c','D'
    };
    char cc[]={
    'A','B'
    };
    cout<<cc<<endl;

    输出结果如下图:

    然后我们探讨一下最末尾为啥就一个随机数字呢,

    int main()
    {
    char str[] = {'H','e','l','l','o'};

    char bb[]={'a','b','c','D' };
    char cc[]={'A','B'};
    bb[7]='';
    cout<<bb<<endl;

    结果如下图,如果对b[7]='',那么输出截止到bb后面第七个

    以上测试是在mingw gcc version3.2测试的,用的是cfree,注意我用vs2010测试结果不一样啊

    测试如图

    地址高的地方在栈底,输出的时候,比如输出cc吧,ab烫烫abcd烫烫几下,然后hello在烫几下最后输出也结束,至于最后为啥结束,我再探讨ing

    希望大牛斧正!

  • 相关阅读:
    Daemon——守护进程
    RTMP
    CR LF CR/LF
    SO_REUSEADDR
    [aac @ ...] more samples than frame size (avcodec_encode_audio2)
    前端向后端传数据的方法
    控制层接受参数
    Swagger2
    net.sf.json------json解析
    springboot
  • 原文地址:https://www.cnblogs.com/codeblock/p/4446123.html
Copyright © 2011-2022 走看看