Как получить доступ к элементов структуры по указателю (С++)? Как можно получить доступ к элементам структуры? Есть указатель на void * ( указывает на определенную структуру ). Пример:struct object { int a; std::string b; }; у меня есть указатель - object o; void *p = &o; можно узнать смещение в памяти по указателю:int offset1 = offsetof(struct object, a); int offset2 = offsetof(struct object, b); например int я могу установить:*((int *) (p + offset1)) = 5; вопрос как установить std::string? если я привожу к указателю - получаю кашу. Вариант использовать в структуре указатель на std::string не подходит. Есть варианты? --- Хотя проверил так работает:#include #include struct object { int a; std::string b; }; int main(int argc, const char * argv[]) {
object o; char *p = (char *) &o;
o.a = 1; o.b = "demo";
int offset1 = offsetof(struct object, a); int offset2 = offsetof(struct object, b);
Да, вы правы. Использование стандартного std::string в данном случае может вызвать проблемы из-за своей сложной структуры данных. Если вы хотите сохранить строку в структуре по указателю, можно воспользоваться более простым способом, например, использовать массив символов:
В этом примере в структуре object вместо std::string использован массив символов char b[20], чтобы хранить строку. При установке значения в этот массив можно воспользоваться функцией strcpy. В данном случае "demoooo" будет скопировано в массив символов.
Да, вы правы. Использование стандартного std::string в данном случае может вызвать проблемы из-за своей сложной структуры данных. Если вы хотите сохранить строку в структуре по указателю, можно воспользоваться более простым способом, например, использовать массив символов:
#include <iostream>struct object
{
int a;
char b[20]; // предполагаем максимальную длину строки
};
int main(int argc, const char * argv[]) {
object o;
char *p = (char *) &o;
o.a = 1;
int offset1 = offsetof(struct object, a);
int offset2 = offsetof(struct object, b);
*((int *) (p + offset1)) = 5;
strcpy((char *)(p + offset2), "demoooo");
return 0;
}
В этом примере в структуре object вместо std::string использован массив символов char b[20], чтобы хранить строку. При установке значения в этот массив можно воспользоваться функцией strcpy. В данном случае "demoooo" будет скопировано в массив символов.