【问题标题】:Cannot use string class to assign characters but works with char array in C++不能使用字符串类来分配字符,但可以在 C++ 中使用 char 数组
【发布时间】:2018-07-30 07:43:39
【问题描述】:

我正在尝试将string 中的一些字符分配给另一个string,如下所示:

string s2;
int ind = -1;

for(int i = 0; i < ch; i++)
{
    s2[++ind] = s[i];
}

s2[++ind] = '\0';

现在当我尝试使用

打印 s2
cout << s2 << endl;

它在黑屏上不打印任何内容。但是当我使用char 数组代替string 声明s2 时,s2 会成功打印。我认为string 和char 数组的字符都可以以相同的方式访问。无法理解为什么会这样。有关于此的一些信息?

【问题讨论】:

  • std::string 不是 C 字符串!
  • 为什么需要 i 和 ind 这两个索引?
  • @ΦXocę 웃 Пepeúpa ツ,使用两个索引没有坏处吧?
  • @Jaya 可能会对内存和性能造成影响,而且 imo 的可读性也稍差。你可以在循环之前声明i。

标签: c++ arrays string


【解决方案1】:

您无法访问空字符串的++indd 元素。使用字符串的运算符+= 将char 附加到字符串。

【讨论】:

  • 您还可以提到从 char 数组(或其他字符串)std::string s2(s); 构造字符串的更简单方法,然后是这次迭代。
  • @Filip Kočica,我没有使用所有字符,只使用其中一些字符。我认为s2(s, s + ch); 工作正常。明白了。
【解决方案2】:

您的代码包含未定义的行为!

一开始你的字符串大小为零,你不调整它的大小。因此,未分配所需的内存并且未更新 string 中的正确信息。
小字符串优化可能会防止应该发生的崩溃。

两种修复方法:

// crappy solution - to match your pattern
string s2;
for(int i=0;i<ch;i++)
{
    s2.push_back(s[i]);
}

// a good one
string s2(s, s + strlen(s));

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 2021-06-08
    • 2011-10-11
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多