【问题标题】:C++ Strings single chars [duplicate]C ++字符串单个字符[重复]
【发布时间】:2013-08-20 10:10:34
【问题描述】:

我刚开始学习 C++,我对字符串有点困惑。 我首先需要一个输入单词并将每个字符保存在字符数组的特定位置。 但是字符串基本上是字符数组,不是吗? 但这不起作用:

char word[];
cin >> word[];

虽然这可行,但我不知道如何将字符填充到数组中。

string s;
cin >> s;

到目前为止我已经尝试过了,但是我得到了一个编译错误:

string s;
cin >> s;
char word[] = s;

对不起,我刚开始编程,不知道有没有人给我一些建议:)

【问题讨论】:

  • 为什么不直接使用字符串schar 数组的用途是什么?
  • @juanchopanza “我刚刚开始学习 C++”可能是一个学习练习,以锤炼内存基础和原语
  • std::string 是一个库类。数组是内置类型,没有太多内置功能。
  • @imsoconfused 好吧,那将是一种非常低效的学习方式。但通常初学者对标准库的了解不够,无法有效使用它,认为他们需要使用普通数组或neweverythere。

标签: c++ string


【解决方案1】:
char word[];

您需要给出数组的大小。然后,您可以直接对其进行输入。如果您希望将读取的std::string 复制到字符数组,那么您需要使用安全的字符串复制函数,例如strncpy。比如——

char word[10];
std::string str("Hello");

strncpy(word, str.c_str(), sizeof(word));

但是,建议在 C++ 中使用 std::string,而不是使用字符数组。

【讨论】:

  • 由于已知数组大小为 10 且 string 包含 5 个字符,因此不需要 strncpy。如果您确实使用了strncpy,您必须检查它是否生成了有效的字符串;如果源字符串(不包括终止 '\0')有足够的字符来填充目标数组,则结果中将没有终止 '\0'。盲目使用那个数组会出问题。
  • 是的,在这个例子中。但我只希望 OP 使用字符串安全复制功能。
  • 耸耸肩。写一个需要它的例子,解释它为什么需要它,并正确使用它。如果您使用不当,使用“安全”功能对您或其他任何人都没有任何好处。
猜你喜欢
  • 2012-02-27
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多