C++字符串问题-如何访问字符串元素



我在C++中有这个简单的代码:

#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
s[0]='A';
cout << "s is: " << s << endl
<< "s[0] is: " << s[0] << endl;
}

为什么s为空,但s[0]的值为"A"?C++字符串可以通过索引直接赋值给它的元素吗?谢谢

这是未定义的行为。字符串s为空。在C++11之前,您无法访问s[0]。从C++11开始,你可以读s[0],但不能写。

你可以用调整字符串的大小

#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
s.resize(1);
s[0]='A';
cout << "s is: " << s << endl
<< "s[0] is: " << s[0] << endl;
}

读取https://en.cppreference.com/w/cpp/string/basic_string/operator_at

为什么s是空的

因为您默认构造了它,所以它最初是空的,并且您没有为它的字符存储分配内存。

但s[0]的值为"A"?

没有。您正在将'A'分配给尚未分配的内存。

是否可以通过索引直接将C++字符串的值分配给其元素?

是,但仅适用于size()大于0时0..size()-1范围内的有效索引。在您的示例中,索引0无效,因为s.size()为0。

#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
s.resize(1); // <-- add this!
s[0]='A';
cout << "s is: " << s << endl
<< "s[0] is: " << s[0] << endl;
}

相关内容

  • 没有找到相关文章

最新更新