【发布时间】:2021-04-11 14:25:41
【问题描述】:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
s[0] = 'a';
cout << s << endl;
return 0;
}
我使用了这段代码并运行了,但是没有输出不知道为什么?
但是如果我使用 s = "";然后也没有输出。
但是当我使用 s = " ";那么输出来了,为什么会这样呢?
【问题讨论】:
-
s[0] = 'a';是未定义的行为。您无法访问不存在的字符串的位置。s在调用时为空,因此s[0]超出范围。 -
但是当我使用 s = " ";然后输出出现为什么会这样? 因为在这种情况下,s 的长度为 1 而不是 0。长度为 1 时,
s[0]将是一个有效的操作。这里要清楚地记住,访问越界索引不会扩展字符串,这样做是未定义的行为/违反了语言规则。