我有一些像这样的代码:
string s = "ab";
s[0] = '1';
s[1] = '2';
cout << s << "." << s[0] << "." << s[1] << "." << endl;
它给了我想要的东西,即12.1.2.
但是以下代码:
string ss = "";
ss[0] = '1';
ss[1] = '2';
cout << ss << "." << ss[0] << "." << ss[1] << "." << endl;
它没有给我我想要的东西。其输出为.1.2.
为什么?我认为它应该是12.1.2.
BTW,我是用QTcreator 5.4做的。那有关系吗?
提前致谢!
答案 0 :(得分:2)
string ss = "";
ss[0] = '1';
ss[1] = '2';
cout << ss << "." << ss[0] << "." << ss[1] << "." << endl;
这看起来像未定义的行为。也许您应该使用at
来触发out_of_range
例外:)
string ss = "";
ss.at(0) = '1';
ss.at(1) = '2';
cout << ss << "." << ss[0] << "." << ss[1] << "." << endl;
在OS X上产生以下结果(因为我不捕获异常):
$ ./cxx-test.exe
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
您可以使用以下内容修复它:
string ss = " "; // two blanks spaces
或者:
string ss;
ss.resize(2);