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