我在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;
}