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