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

时间:2015-10-08 06:07:51

标签: c++ arrays struct

如果文件不存在,我试图创建一个自动将数据填充到二进制文件中的函数。由于它不存在,我想自己从一个函数添加数据,所以它也可以用数据创建文件本身。

我做的结构

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

5 个答案:

答案 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*