Как сделать второй указатель из массива на ту же область памяти?
Имеется такой код:
~ $ 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");
}