我有一个班级单位。这个类的对象有名称,id,预算和其他东西。我想将名称和预算保存在位置(i-1)的.txt文件中。我创建了名为Unit2的结构:
struct Unit2{
string name;
int budget;
};
我的file.write函数:
void writeBudgets(Unit name,int i) {
ofstream file("C:\\Users\\User\\Desktop\\budgets.txt");
Unit2 p;
p.name = name.getName(); //get name from the class Unit
p.budget = name.getBudget(); //same for budget
file.seekp((i-1)*sizeof(Unit2));
file.write(reinterpret_cast<char*> (&p),sizeof(Unit2));
file.close();
}
在主要的我创建单元“a”的对象,名称为“asd”,预算为120.当我使用writeBudgets函数时,会在我的文件中添加一个额外的字符。例如writeBudgets(a,2);
给了我hÆPasd ÌÌÌÌÌÌÌÌÌÌÌÌ Œ
。我该怎么办?
答案 0 :(得分:4)
您不能将std::string
这样写入文件,因为std::string
对象本身没有实际的字符串,而是指向字符串及其长度的指针。 / p>
您应该做的是了解有关C ++ input/output库的更多信息,然后您可以为您的结构创建自定义输出运算符<<
。
您制作了自定义operator<<
功能:
std::ostream& operator<<(std::ostream& os, const Unit2& unit)
{
// Write the number
os << unit.budget;
// And finally write the actual string
os << unit.name << '\n';
return os;
}
使用上述功能,您现在可以进行例如。
Unit2 myUnit = { "Some Name", 123 };
std::cout << myUnit;
它将在标准输出上打印
123 Some Name
要读取结构,请创建相应的输入操作符函数:
std::istream& operator>>(std::istream& is, Unit2& unit)
{
// Read the number
is >> unit.budget;
// The remainder of the line is the name, use std::getline to read it
std::getline(is, unit.name);
return is;
}