Есть две проблемы с кодом, который вы показываете:
С
estado.nome[estado.current] = malloc(sizeof(char*));
Вы выделяете только пространство для указателя , а не всю строку. Это похоже на создание массива одного указателя. Вам нужно выделить место для самой строки, длину которой вы получите от strlen
, а также для нулевого терминатора в конце:
estado.nome[estado.current] = malloc(strlen(nome) + 1); // +1 for null-terminator
С
estado.nome[estado.current++] = nome;
вы перезаписываете указатель, который вы создали выше. Это эквивалентно, например, int a; a = 5; a = 10;
и затем удивитесь, что a
больше не равен 5
. Вам нужно скопировать строку, а не указатель:
strcpy(estado.nome[estado.current++], nome);
Конечно, вам нужно free
памяти, которую вы позже выделите в своем коде, как только вы закончите с этим.
И, конечно, у вас должна быть некоторая проверка границ, чтобы убедиться, что вы не выходите за пределы массива estado.nome
(то есть проверка для estado.current < 10
).