字符串大小不良输出

Utk*_*tav 1 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
Run Code Online (Sandbox Code Playgroud)

即使我改变s.lengths.size,结果也一样.为什么s[0] = 'd's.size() = 0;

Set*_*gie 5

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

你需要这样做

string f(1, 'd'), s; // creates f with 1 repetition of 'd'
s.append(f);
...
Run Code Online (Sandbox Code Playgroud)

要么

string f, s;
f += 'd'; // or f.push_back('d'), or f.append('d'), or...
s.append(f);
...
Run Code Online (Sandbox Code Playgroud)