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. @milleniumbugが提案したようにstd::stringを使用します(私のお気に入り)
于 2012-07-18T17:01:19.133 に答える