Как сделать второй указатель из массива на ту же область памяти?

Имеется такой код:

 ~ $ cat func.c
static char *global = 0; // "static" for global changing

void setchar() {
    *global = "OK"; // set variable "char *global".
}

 ~ $ cat main.c
extern void setchar();
extern char *global;
char **massive = {}; // тут-то и проблема

int main() {
    setchar();
    ...
}

Видите ли, что мне надо. Мне надо один указатель, значение которого присвоить в функции setchar(). Его я объявил static и extern. Есть массив строк massive, и мне надо туда поместить указатель на строку global. Идея сделать "указатель на указатель" (char **) мне не подходит, ибо указатель мне надо поместить в массив строк char **massive. Мне надо, чтобы было два указателя - global и massive[0], которые бы указывали на одну и ту же область памяти, на одну и ту же строку, которая изменится функцией setchar(). И при этом massive ДОЛЖЕН БЫТЬ виден и определён в файле main.c. Я вот не пойму, как это сделать. Была мысль сделать отдельный указатель, присвоив ему адрес указателя global:

char *massive_zero = global;

char *massive_zero = &global;

char *massive_zero;
massive_zero = global;

char *massive_zero;
massive_zero = &global;

Но компилятор (gcc-10) везде вешает либо ошибку, либо warning.

И как правильно сделать второй указатель на строку (да ещё и прямо в массиве указателей), которая вообще объявлена static и extern?

P. S. спасибо Harry за одно напоминание. Поправлю функцию setchar:

#include <string.h>

static char *global = 0;

void setchar() {
   strcpy(global, "OK\0"); 
}

P. S. 2. Поправляю с malloc:

#include <stdlib.h>

static char *global = 0;

void setchar() {
    global = malloc(sizeof(char) * 3);
    strcpy(global, "OK\0");
}

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