1

我想使用 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);
 }

希望有人可以提供帮助。

4

2 回答 2

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);
 }
于 2012-07-18T16:59:18.140 回答
1

您将相同的缓冲区 ( line) 推入向量的每个位置。您需要:

  1. 使用为每一行重新分配一个新的 char*new
  2. 用于在每一行strdup复制line缓冲区
  3. 使用 std::string 作为@milleniumbug 建议(我最喜欢的)
于 2012-07-18T17:01:19.133 回答