索引到字符串时输出不正确

时间:2015-03-29 00:45:10

标签: c++ string char

我有一些像这样的代码:

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做的。那有关系吗?

提前致谢!

1 个答案:

答案 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);
相关问题