【问题标题】:Storing strings in a vector causes error将字符串存储在向量中会导致错误
【发布时间】:2012-05-01 00:12:06
【问题描述】:

我正在尝试将从文件中读取的字符串存储在 std::vector 中,但我遇到了一个奇怪的错误...

所以我有了容器:

std::vector<std::string> m_Strings;

然后我从流中读取字符串:

ifstream inStream;
char word[100];
//[...]
inStream >> word;
m_Strings.push_back(word);

即使向量是空的,当我插入第一个字符串时,向量会调整大小以容纳 8 个字符串,索引 0 的字符串包含随机字符,索引 1 的字符串包含正确的单词,而其他索引包含无效的指针.. .

知道是什么原因造成的吗?

编辑:在这种情况下,我正在阅读字符串“DIRECTIONAL_LIGHT”,因此它适合char word[100]

【问题讨论】:

  • 发布SSCCE
  • 您是否在word中读取了超过99个字符?
  • 读取字符而不是字符串的任何理由?
  • 这真的很容易受到缓冲区溢出的影响......这可能是问题所在。
  • 从 stark 和 dgnorton 那里得到提示:让我们看看我们是否可以用一块石头杀死两只鸟:如果将 char word[100]; 更改为 std::string word; 会更好吗?

标签: c++ string vector


【解决方案1】:

刚把char word[100];改成std::string word;,错误就消失了。

【讨论】:

  • 一般来说,当字符串的长度确定未知时,你应该使用std::stringmallocnew,这样不知道的用户就不会知道导致缓冲区溢出,因此恶意用户不能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 2022-11-16
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多