Alocar dinamicamente a sequência inserida pelo usuário
Estou tentando escrever uma função que faz o seguinte:
Inicie um loop de entrada, imprimindo'> '
cada iteração.Pegue o que o usuário digitar (comprimento desconhecido) e leia-o em uma matriz de caracteres, alocando dinamicamente o tamanho da matriz, se necessário. A linha inserida pelo usuário terminará com um caractere de nova linha.Adicione um byte nulo,'\0'
, até o final da matriz de caracteres.O loop termina quando o usuário insere uma linha em branco:'\n'
Isto é o que eu escrevi atualmente:
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;
}
Agora, não tenho muita certeza de como adicionar o byte nulo ao final da string. Eu estava pensando algo assim:
last_index = strlen(str);
str[last_index] = '\0';
Mas não tenho muita certeza se isso funcionaria. Não posso testar se funcionaria porque estou encontrando esse erro ao tentar compilar meu código:
warning: ISO C does not support the 'a' scanf flag [-Wformat=]
Então, o que posso fazer para que meu código funcione?
EDIT: mudandoscanf("%a[^\n]%*c",&input) == 1
parascanf("%as[^\n]%*c",&input) == 1
me dá o mesmo erro.