在字符串的情况下没有得到输出

Posted

技术标签:

【中文标题】在字符串的情况下没有得到输出【英文标题】:Not getting output in case of string 【发布时间】: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] 将是一个有效的操作。这里要清楚地记住,访问越界索引不会扩展字符串,这样做是未定义的行为/违反了语言规则。 请阅读Why should I not #include <bits/stdc++.h>?和Why using namespace std is bad practice。 【参考方案1】:

您使用的是未初始化的string,因此将a 分配给s[0] 不会执行任何操作或执行未定义的行为。为此,您必须为s 指定一个大小,如下所示:

选项 1:调整大小

#include <bits/stdc++.h>
using namespace std;

int main()

    string s;
    s.resize(10);
    s[0] = 'a';
    cout << s << endl;
    return 0;

选项 2:向后推

#include <bits/stdc++.h>
using namespace std;

int main()

    string s;
    s.push_back('a');
    cout << s << endl;
    return 0;

选项 3:+=

#include <bits/stdc++.h>
using namespace std;

int main()

    string s;
    s += 'a';
    cout << s << endl;
    return 0;

还有更多选择,但我不会把它们放在这里。 (可能是append

【讨论】:

【参考方案2】:

请参阅注释here 您正在尝试访问不带任何字符的字符串中的第一个(第零个)字符。这是未定义的行为。

【讨论】:

以上是关于在字符串的情况下没有得到输出的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有字符串解析的情况下解析 Python 中的 ValueError?

在这种情况下如何获取两个字符之间的字符串?

标准流打印无关字符

在没有库的情况下读取 Excel 文件

在没有空格键的情况下计算字符串中的字母

在没有格式化程序的情况下将时间戳转换为字符串