Вы разыменовываете нулевой указатель.Ничего хорошего из этого не выйдет:
char** devices = NULL;
инициализирует указатель на NULL
.Он никогда не устанавливается на что-либо другое, а затем разыменовывается (дважды).
Указатели считаются сложными, и их довольно сложно использовать, если кто-то не совсем точно понимает, что он / она делает.Я думаю, что в вашем сценарии есть два варианта.Вы можете хранить имена в одном массиве char
, расположенном рядом с другим, и сохранять массив указателей, указывающих на начало этих имен, или вы можете использовать массив char
массивов (двумерный массив) для хранения имен ".отдельно "каждый в другом массиве.Я думаю, что второй способ намного проще, и вы должны начать с его работы.
Вы можете определить массив следующим образом
#define NUM_OF_NAMES 3
char devices[NUM_OF_NAMES][DEVICE_SIZE] = {0};
сейчас devices[0]
, devices[1]
и devices[2]
все char
массивы типа char[DEVICE_SIZE]
. Вы можете использовать каждый из них, как и ранее, как буфер.