繁体   English   中英

如何使用字符串初始化外部结构的字符数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM