{
char *name[128];
long id;
long long hash64;
}
тут хочу узнать позицию переменной 'id' (128)
втф
Видимо вам надо offsetof
offsetof, но так лучше не делать вообще Вас не должна волновать позиция переменной
Хорошо спасибо, подскажи тогда как мне вытащить из файла базы данных юзеров со списком этой структуры что я указал. Мне вот нужно вытащить только id из файла, как мне обойтись без offset и не считать лишнии данные?
ты прям бинарно записываешь эту структуру в файл?
да, все данные бинарные
если задание для уника, то да, делай через offsetof
ну если у тебя файл бинарный, структура записей регулярна: struct userInfo { char name[128]; long id; long long hash64; } то смещение id - это функция от номера записи size_t offset_of_id_in_binary_file(size_t recno) { return offsetof(userInfo, id) + recno*sizeof(userinfo); } только сразу хочу указать на то, что бинарное представление не универсально и будет варьироваться от платформы к платформе, как и сами размеры long, не говоря уже о паддинге между членами самой структуры.
Спасибо, с размерами я знаю, этот пример структуры я написал примерно, чтобы проще на вопрос ответили. А так у меня все таточено под одну платформу. Кстати паддинг регулируется?
https://en.cppreference.com/w/cpp/preprocessor/impl см #pragma pack
вопрос возник, это не повлияет на структуры и классы где это выравнивание нужно, ну допустим для стандартных либ? Если конечно это еще можно сделать индивидуально для одной структуры
повлияет, поэтому перед своей структурой его включают, после выключают
#pragma pack(push, 1) struct mystruct { ... }; #pragma pack(pop) но предлагаю все же прислушаться к словам, сказанным выше и отказаться от прямого маппинга структуры в файле структуре в памяти.
Обсуждают сегодня