如果文件不存在,我试图创建一个自动将数据填充到二进制文件中的函数。由于它不存在,我想自己从一个函数添加数据,所以它也可以用数据创建文件本身。
我做的结构
struct Address {
char city[ADDR_SIZE];
char state[ADDR_SIZE];
int zipcode;
};
struct Record {
char name[NAME_SIZE];
int socialSecurityNum;
int dateOfBirth;
Address address;
};
我试图像这样添加数据
dataFile.seekp(getBytePosition(0), ios::beg);
citizen.name = "Some name"; //ERROR: char[30] not assignable
citizen.socialSecurityNum = 123123123;
citizen.address.zipcode = 75042;
dataFile.write(reinterpret_cast<char *>(&citizen), sizeof(citizen));
给它整数很简单,但是如何填充char name数组?
我也试过这些但是失败了
citizen.name[NAME_SIZE] = "Some name"; //Fails
citizen.name[NAME_SIZE] = {"Some Name"}; //Fails
citizen.name[NAME_SIZE] = 'Some Name'; //Too Many errors
答案 0 :(得分:3)
第一个选项(不推荐):使用strcpy
strcpy(citizen.name, "Some name");
或更安全(推荐)strncpy
strncpy(citizen.name, "Some name", sizeof(citizen.name));
第二个选项(推荐):使用char
代替std::string
数组:
struct Address {
std::string city;
std::string state;
int zipcode;
};
struct Record {
std::string name;
int socialSecurityNum;
int dateOfBirth;
Address address;
};
使用std::string
您可以分配给它:
citizen.name = "Some name";
但是,您将承担序列化数据的额外负担,但我相信它值得。
答案 1 :(得分:1)
使用strcpy
strcpy(citizen.name, "Some name") ;
使用std :: string只是简单的代码,但是由于std :: ostream.write不会更复杂,因此会使加载/保存到文件更加困难
答案 2 :(得分:1)
尝试将strcpy或memcpy与适当的强制转换一起使用。
检查this。
答案 3 :(得分:1)
由于您有一个char数组,因此不能只使用=赋值。您应该使用strcpy()
或更好,std::copy()
答案 4 :(得分:1)
在声明数组后,您无法将$
分配给cp file.txt "//P2.OUTPUT(\$010)"
数组。请使用char*
将char[]
数据的内容复制到strncpy()
内存中:
char*