• c/c++中字符串常量的不相等性,以及字符串的copy

    普通类
    • 支持
    • 批判
    • 提问
    • 解释
    • 补充
    • 删除
    • c/c++中字符串常量的不相等性,以及字符串的copy

    C++ 代码
    //程序作者:管宁
    //站点:www.cndev-lab.com
    //所有稿件均有版权,如要转载,请务必著名出处和作者

    #include <iostream>
    using namespace std;
    void main(void)
    {
    if("test"=="test")
    {
    cout<<"相等";
    }
    else
    {
    cout<<"不相等";
    }
    }




    上面的代码我们测试两个内容为test的字符串常量是否相等,按照常理,应该是相等的,这些在一些过程式语言中会得到相等的结论,但在c/c++却不是这样。

    为什么呢?

    答案在这里:因为字符串常量存储在计算机内存中,两个字符串常量的地址均不相同,所以这样的比较自然就不会得到我们所需要的结果,如果要进行是否相等的比较应该使用strcmp()这个涵数进行比较!


     
    C++ 代码
    //程序作者:管宁
    //站点:www.cndev-lab.com
    //所有稿件均有版权,如要转载,请务必著名出处和作者

    #include <iostream>
    #include <string>
    using namespace std;
    void main(void)
    {
    if(strcmp("test","test")==0)
    {
    cout<<"相等";
    }
    else
    {
    cout<<"不相等";
    }
    cin.get();
    }



    strcmp()的函数原形是,int strcmp(const char* str1,const char* str)

    相当将会返回一个等于0的整数,不相等的时候将会返回一个非0整数!

    



       C++ 代码
    //程序作者:管宁
    //站点:www.cndev-lab.com
    //所有稿件均有版权,如要转载,请务必著名出处和作者

    #include <iostream>
    #include <string>
    using namespace std;
    void main(void)
    {
    char test[]="test str!";
    char str[15];
    strcpy(str,test);
    cout<<str<<endl;

    int a[]={1,2,3,4,5};
    int b[5];
    memcpy(b,a,sizeof(a)*sizeof(int));
    for(int i=0;i<5;i++)
    {
    cout<<b[i]<<",";
    }
    cin.get();
    }




    上面的代码中的strcpy用来处理字符串数学组的copy,由于字符串数组属于const char*也就是常量指针所以是不能用a="test str!";的方式赋值的,接在后面的memcpy用于处理非\0结尾的数组的copy处理,memcpy第三个参数是设置b在内存中所需要的内存空间大小所以用sizeof(a)*sizeof(int)来处理!

    

    • 标签:
    • str
    • 作者
    • void
    • test
    • 代码
    • 字符串
    • char
    • 常量
    • 以及
    • 不相等
    • int
    • 相等
  • 加入的知识群:
    学习元评论 (0条)

    评论为空
    聪明如你,不妨在这 发表你的看法与心得 ~



    登录之后可以发表学习元评论
      
暂无内容~~
顶部