'Сбой' при изменении значения многомерного массива char - PullRequest
0 голосов
/ 11 февраля 2019
    char * charArray[][6][3] = {
    {
        {"2"}, //Size of 1st dimension
    },
    {//Section 1
        {"5"}, //Size of each 2nd dimension
        {"Option 1", "21", "0"},
        {"Option 2", "493", "1"},
        {"Option 3", "102", "0"},
        {"Option 4", "531", "1"},
        {"Option 5", "20", "0"},
    },
    {//Section 2
        {"3"},
        {"Something else", "50", "0"},
        {"Any text can", "1654", "0"},
        {"be in these", "1190", "0"},
    },
};

Массив определен, как указано выше.Это нужно будет динамически менять, но я не уверен, как можно определить максимальный размер каждого массива символов?

Чтение значений работает точно так, как ожидается, но при попытке изменить любое значение микроконтроллер падает.

charArray[1][2][3][0] = '0';

Я перепробовал все, что только мог придумать, и мне не повезло.

Может ли кто-нибудь помочь мне понять, что происходит, и если есть лучший способ достичьэто?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Тим Рэндалл уже объяснил , что происходит .Если вы согласны с изменением строк в целом вместо замены отдельных символов, вы можете заменить, например,

charArray[1][2][3][0] = '0';

на

charArray[1][2][3] = "0";
0 голосов
/ 11 февраля 2019

Когда вы определяете и инициализируете указатель на символ с использованием строковых литералов, например так ...

char* p = "Hello World";

... вы выделяете массив символов в постоянной памяти , инициализируя его литеральным значением и указывая указатель char p на эту постоянную память.Вы не можете изменять его: p[1]='u'; недопустимо.

Вы можете изменять символы, если вы явно определяете массив, а не указатель.

char p[] = "Hello World";

Расширение этогобыть многомерным - это упражнение для читателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...