Вы можете сделать это двумя способами:
Назначить указатель на массив символов
Как только функция выйдет из char_array [10], на который указывает указатель, станет недействительным.Компилятор не выдаст ошибки, но в конечном итоге программа, скорее всего, вылетит, потому что вы перезапишете данные для другой функции или прочитаете неправильные данные, потому что другая функция перезаписала их чем-то другим.Вы должны узнать о , как работает стек в архитектуре вашего компьютера.
char char_array[10];
my_struct_t var;
var.my_string = &array[0];
var.my_string[3] = 'a';
if (var.my_string[0] == char_array[0])
printf("See, changes using the pointer effect char_array.\n");
else
printf("This will never happen.\n");
Выделить память и скопировать массив символов
Я использовал для Циклы, чтобы помочь понять, как именно это работает.Как только текущая функция завершит работу, указатель все равно будет указывать на действительную память, если вам удастся как-то ее сохранить.
char char_array[10];
my_struct_t var;
int l;
char_array[0] = 'a';
char_array[1] = 0;
// l = strlen(&char_array[0])
for (l = 0; char_array[l] != 0; ++l);
var.my_string = (char*)malloc(sizeof(char) * l);
// strcpy(var.my_string, &char_array[0]);
for (l = 0; char_array[l] != 0; ++l)
var.my_string[l] = char_array[l];
var.my_string[0] = 'a';
if (var.my_string[0] != char_array[0])
printf("See, changes using the pointer DO NOT effect char_array.\n");
else
printf("This will never happen.\n");