Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C++ praca so stringami a polami char v binarnom subore

Zapisujem data binarneho suboru binarny subor ma hlavicku.

Na zaciatku hlavicky je ID co je sada znakov konstanta podla ktorych viem rozlisit ten format suboru.

Prvy problem nastava uz pri definicii konstanty prekladac C++ mi neumoznuje definovat konstantu s presnou velkostou. NiecoXY ma 7 znakov ale prekladac mi dovoli pole inicializovat iba na 8 znakov. Chce tam totiz pridat ukoncovaci znak '\0'. Lenze ja viem ze pole nakov v tomto formate suboru bude mat presne 7 znakov a ukoncovaci znak \0 je tam uplne zbytocny.

const char XYFileID[7] = "NiecoXY"; // toto mi prekladac nedovoli
const char XYFileID[8] = "NiecoXY"; // musim definovat toto

Dalej chcem nadefinovat hlavicku binarneho suboru takto:

struct XYFileHeader {
	const char Id[7] = XYFileID; // rovnaky problem ako v prvom pripade
	float Width;
	float Height;
	float DpiX;
	float DpiY;
	char Codec[10];
};

Ale opat je tam problem s ukoncovacim znakom. Prekladac C++ mi ho tam chce za kazdu cenu nanutit. Takze musim to riesit takto:

const char XYFileID[8] = "NiecoXY";
struct XYFileHeader {
	char Id[7];
	float Width;
	float Height;
	float DpiX;
	float DpiY;
	char Codec[10];
	XYFileHeader() {
		strcpy(Id, XYFileID);
	}
};

co prinasa 2 problemy: Id vramci struktury neni const. Musim tie znaky kopirovat az v konstruktore cez strcpy co samozrejme neni tak samovysvetlujuce. Poznate nejaky lepsi sposob? Ale prosim prehladny. Toto za prehladne nepovazujem:

const char XYImageID[7] = { 'N', 'i', 'e', 'c', 'o','X', 'Y' };
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Môžeš použiť std:array<char, 7>, na inicializáciu môžeš použiť std:to_array (alebo vlastný constexpr… poslední
moose 22.03.2020 06:18
moose

Zpět do poradny Odpovědět na původní otázku Nahoru