开发者社区> 问答> 正文

c++字符串问题

代码如下图所示,在main函数中,有两个string类型的变量,其中一个变量str1我直接初始化,另一个变量str2我没有初始化,但是string类型调用默认构造函数,使得str2 = "0",是这样吧。我对str1的首字符进行了变换,然后用cout可以在后面输出,为什么我对str2的首字符进行变换后,再用cout输出,但是没有得到正确的输出啊。请问这是怎么回事啊?谢谢。

#include <iostream>
#include <string>

int main()
{
    std::string str1 = "test";
    std::string str2;

    if (str2[0] == '\0')
        std::cout << "yes" << std::endl;

    str1[0] = 'a';
    str2[0] = 'b';
    std::cout << str1 << '\n'
              << str2 << '\n';
    
    str2[1] ='\0';

    std::cout << str1 << '\n'
              << str2 << '\n';

    return 0;
}

screenshot

展开
收起
a123456678 2016-03-09 15:20:22 2055 0
1 条回答
写回答
取消 提交回答
  • #include <iostream>
    #include <string>
    
    int main()
    {
        std::string str1 = "test";    //有效长度4(不包含'\0')
        std::string str2;    //有效长度0
    
        //前面声明其实和 str1[4], str2[0]没什么不同 
        
        // c++ string类并没有智能到 像其他的一些语言
        // 你访问没有分配的字符下标 自动分配内存的地步 
        // 正如str2[0] 你并没有分配任何内存,也就不能访问了
    
        if (str2[0] == '\0')   //这个访问是 错误的,如果你判断是否为空请用 .empty
            std::cout << "yes" << std::endl;
    
        str1[0] = 'a';    //如果你非要这么做可以使用 .insert的重载
        str2[0] = 'b';
        std::cout << str1 << '\n'
                  << str2 << '\n';
        
        str2[1] ='\0';
    
        std::cout << str1 << '\n'
                  << str2 << '\n';
    
        return 0;
    }
    2019-07-17 18:56:14
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载