![](/img/trans.png)
[英]How to initialize char[] in a struct with constexpr char[] using initializer list?
[英]How to initialize char arrays for a struct outside using strings?
我正在尝试创建一个函数,如果文件不存在,它会自动将数据填充到二进制文件中。 由于它不存在,我想从函数中自己添加数据,以便它也可以使用数据创建文件本身。
我做的结构
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));
给它整数很简单,但如何让它填充字符名称数组?
我也试过这些但失败了
citizen.name[NAME_SIZE] = "Some name"; //Fails
citizen.name[NAME_SIZE] = {"Some Name"}; //Fails
citizen.name[NAME_SIZE] = 'Some Name'; //Too Many errors
第一个选项(不推荐) :使用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";
但是,您将有额外的数据序列化负担,但我相信这是值得的。
使用 strcpy
strcpy(citizen.name, "Some name") ;
使用 std::string 会简化代码,但会使加载/保存到文件更加困难,因为 std::ostream.write 不会更复杂
尝试使用带有适当类型转换的 strcpy 或 memcpy。
检查这个。
因为你有一个字符数组,你不能只用 = 赋值。 您应该使用strcpy()
或更好的std::copy()
在声明数组后,不能将char*
分配给char[]
数组。 改用strncpy()
将char*
数据的内容复制到char[]
内存中:
strncpy(citizen.name, "Some name", NAME_SIZE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.