Код довольно странный.Не имеет смысла динамически выделять prompts
, в то время как размер является константой, просто напишите это:
char *prompts[] = {
"prompt1> ",
"prompt2> ",
"prompt3> ",
"prompt4> "
};
Нет, malloc
или free
здесь необходимо.
Но выможно сделать еще проще, полностью убрать указатель prompts
и написать это:
for (int i = 0; i < 4; i++) {
do {
char *line;
int number;
printf("prompt%d> ", i + 1);
...
Также я предлагаю заменить
char *string = malloc (sizeof (char) * 10);
на
char *string = calloc(10, sizeof (char));
Это инициализирует выделенную память нулем, и, таким образом, ваш string
будет автоматически завершен NUL.
При этом большинство ваших проблем должно исчезнуть.
Я предлагаю вам прочитать главу, посвященнуюсо строками и главой, посвященной указателям в вашем учебнике по Си.