我无法在这段小代码中找到错误。这有什么问题?
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;
?
答案 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);
...