Vector <char *> push_back会覆盖所有条目</char *>

时间:2012-07-18 16:57:18

标签: c++ vector char fgets push-back

我想使用push_back函数用文本文件中的行填充向量。但它会用最后一行覆盖所有条目。这是源代码:

  int main() {
    std::vector<char*> lines;
    FILE* file;
    file = fopen("textfile.txt", "r");
    const size_t max_line_length = 1000;
    char line[max_line_length + 1];
    while ( !feof(file)) {
      fgets(line, max_line_length, file);
      lines.push_back(line);
    }
    fclose(file);
 }

希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:8)

你正在覆盖Line,这实际上是你唯一存储的东西,因为你永远不会制作深层拷贝。试试这个:

int main() {
    std::vector<std::string> lines; // <- change this!
    FILE* file;
    file = fopen("textfile.txt", "r");
    const size_t max_line_length = 1000;
    char line[max_line_length + 1];
    while ( !feof(file)) {
      fgets(line, max_line_length, file);
      lines.push_back(line);
    }
    fclose(file);
 }

答案 1 :(得分:1)

您正在将相同的缓冲区(line)推送到向量的每个位置。你需要:

  1. 使用new
  2. 为每一行重新分配新的字符*
  3. 使用strdup复制每行的line缓冲区
  4. 使用std :: string作为@milleniumbug建议(我最喜欢的)