MST

星途 面试题库

面试题:C++ 中如何利用指针在文件操作里实现逐行读取并存储每行首字符的地址

在 C++ 中,给定一个文本文件,要求使用指针来实现逐行读取该文件内容,并将每行的首字符地址存储在一个动态分配的指针数组中。请写出实现代码,并简要说明思路。
13.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

代码实现

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

int main() {
    std::ifstream file("example.txt");
    if (!file.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }

    std::vector<char*> linePtrs;
    std::string line;
    while (std::getline(file, line)) {
        char* lineCharPtr = new char[line.size() + 1];
        std::strcpy(lineCharPtr, line.c_str());
        linePtrs.push_back(lineCharPtr);
    }

    file.close();

    // 输出每行首字符地址
    for (const auto& ptr : linePtrs) {
        std::cout << ptr << std::endl;
        delete[] ptr;
    }

    return 0;
}

思路说明

  1. 打开文件:使用 std::ifstream 打开指定的文本文件,并检查文件是否成功打开。如果打开失败,输出错误信息并终止程序。
  2. 动态分配指针数组:使用 std::vector<char*> 来动态存储每行首字符的地址。std::vector 能够动态增长,适合存储不确定数量的指针。
  3. 逐行读取文件:利用 std::getline 函数逐行读取文件内容。每次读取一行后,动态分配一个字符数组来存储该行内容,并将其首地址存入 linePtrs 中。
  4. 关闭文件:读取完成后,关闭文件以释放资源。
  5. 输出与清理:遍历 linePtrs 输出每行首字符地址,并释放之前动态分配的内存,防止内存泄漏。