Как получить доступ к элементов структуры по указателю (С++)? Как можно получить доступ к элементам структуры?
Есть указатель на 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);

*((int *) (p + offset1)) = 5;
*((std::string *) (p + offset2)) = std::string("demoooo");

return 0;
}
я использовал wxString (wxwidgets) - видимо там свои проблемы.

21 Авг 2019 в 07:05
239 +1
0
Ответы
1

Да, вы правы. Использование стандартного 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" будет скопировано в массив символов.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир