簡體   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