注册 登录
编程论坛 C++教室

string类型中最后一位是空字符吗?

troyzyc 发布于 2017-03-30 20:24, 2610 次点击
程序很简单,但是最后总是出错,错在哪里了?string类型中最后一位是空字符吗?
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a;
    cin>>a;
    int i=0;
    while(a[i]!='\0')
    {
        cout<<a[i]<<endl;
        i++;
    }

    return 0;
}
6 回复
#2
烟雨晨曦2017-03-30 21:22
是\0没错
#3
troyzyc2017-03-30 21:25
回复 楼主 troyzyc
那我这个程序哪里错了?
#4
rjsp2017-03-30 21:42
什么编译器?在debug还是release下运行?

C++旧标准并不要求最后存储'\0',新标准强制要求。所以我问问你用的是什么编译器。
如果是老编译器,那出错是正常的。

a[i]其实是逻辑上越界的,但operate[]并不检测越界。
但如果是debug模式,编译器有可能好心的替你检查一下,然后抛出out_of_range异常
#5
troyzyc2017-03-31 10:10
回复 3楼 troyzyc
vs2010
#6
troyzyc2017-03-31 10:12
回复 4楼 rjsp
但是VC++6.0却没有出错提示
#7
rjsp2017-03-31 13:31
以下是引用troyzyc在2017-3-31 10:10:53的发言:

vs2010
不知道,你自己单步调试一下,看看是哪里出问题了。

但按照标准
在C++11之前,If pos == size(), the behavior is undefined.
在C++11及之后,If pos == size(), a reference to the character with value CharT() (the null character) is returned.
所以,VC2010 这种古老的编译器报错是可以的。
1