Динамически распределять введенную пользователем строку
Я пытаюсь написать функцию, которая делает следующие вещи:
Начать цикл ввода, печать'> '
каждая итерация.Возьмите все, что пользователь вводит (неизвестная длина), и считайте его в массив символов, динамически распределяя размер массива при необходимости. Введенная пользователем строка заканчивается символом новой строки.Добавить нулевой байт,'\0'
, до конца символьного массива.Цикл завершается, когда пользователь вводит пустую строку:'\n'
Вот что я сейчас написал:
void input_loop(){
char *str = NULL;
printf("> ");
while(printf("> ") && scanf("%a[^\n]%*c",&input) == 1){
/*Add null byte to the end of str*/
/*Do stuff to input, including traversing until the null byte is reached*/
free(str);
str = NULL;
}
free(str);
str = NULL;
}
Теперь я не слишком уверен, как добавить нулевой байт в конец строки. Я думал что-то вроде этого:
last_index = strlen(str);
str[last_index] = '\0';
Но я не уверен, что это сработает. Я не могу проверить, сработает ли это, потому что я сталкиваюсь с этой ошибкой, когда пытаюсь скомпилировать свой код:
warning: ISO C does not support the 'a' scanf flag [-Wformat=]
Итак, что я могу сделать, чтобы мой код работал?
РЕДАКТИРОВАТЬ: изменениеscanf("%a[^\n]%*c",&input) == 1
вscanf("%as[^\n]%*c",&input) == 1
дает мне ту же ошибку.