字符串大小不良输出

时间:2012-02-01 05:43:35

标签: c++ string

我无法在这段小代码中找到错误。这有什么问题?

string f,s;
f[0] = 'd';
s.append(f);
cout<<f.length()<<"  "<<f<<"  "<<f[0]<<endl;
cout<<s.length()<<"  "<<s<<"  "<<s[0]<<endl;  
Output is : 
0    d
0    d

即使我将s.length更改为s.size,结果也是一样的。为什么s[0] = 'd's.size() = 0;

1 个答案:

答案 0 :(得分:5)

创建它们时,两个字符串都是空的,它们不包含任何字符。 f[0]超出范围,访问空容器的任何元素都是未定义的行为,因此任何事情都可以合法地发生。

你需要做

string f(1, 'd'), s; // creates f with 1 repetition of 'd'
s.append(f);
...

或者

string f, s;
f += 'd'; // or f.push_back('d'), or f.append('d'), or...
s.append(f);
...