矢量<字符*> push_back 覆盖所有条目
Vector<char*> push_back overwrites all entries
我想使用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);
}
希望有人能帮忙。
您正在覆盖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);
}
您正在将相同的缓冲区(line
)推入向量的每个位置。您需要:
- 使用
new
为每行重新分配一个新的char* - 使用
strdup
在每行复制line
缓冲区 - 按照@menniumbug的建议使用std::string(我最喜欢)
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 推导 std::vector::back() 的返回类型
- 使用子类覆盖基类中定义的函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++指针在 for 循环中被覆盖
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- C++找出覆盖同一行的数组
- 专门化模板覆盖函数/避免对象切片
- 重写打印函数而不是覆盖基类
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 如何在 c++ 中覆盖相同的文本文件
- 覆盖应用程序的低级别键盘挂钩问题