Изменение значения в структуре через указатель

Не получается изменить значение переменной в структуре через указатель. В чём ошибка?

struct ko
    {
        int i;
        double n;
        char r[3];
    };
ko* a;
    a->r = "ab";

Ответы (1 шт):

Автор решения: LShadow77

запись a->r = "ab" в С++ означает, что переменной a->r присваивается указатель на константную строку "ab", а не копируется эта строка в массив. Соответственно, есть два варианта. Первый - объявить поле r, как указатель на const char:

struct ko
    {
        int i;
        double n;
        const char* r; //указатель
    };
ko* a;
    a->r = "ab";

Второй - вместо присваивания использовать strcpy() или ещё лучше strncpy():

struct ko
    {
        int i;
        double n;
        char r[3]; //массив
    };
ko* a;
    strncpy(a->r, "ab", 2);
    a->r[2] = '\0'; //обязательно завершить нулём!
→ Ссылка