uilianries
(usa Linux Mint)
Enviado em 03/06/2017 - 15:44h
Nesta linha você pediu para o compilador alocar o tamanho de char e atribui para
qual:
qual = (char *) malloc(sizeof(char));
Nesse momento você só tem espaço para guardar
1 caractere.
Se você quer receber um conjunto de caracteres, precisa informar a quantidade desejada. Suponhamos que o nome poderá conter até 256 caracteres:
qual = (char *) malloc(sizeof(char) * 256);
Nesta linha você solicita ao sistema, ler um conjunto de caracteres e armazená-los em
qual:
gets(qual);
qual só possui espaço para guardar um caractere, logo, você estará limitado nesse ponto.
Por segundo, você solicitou a leitura através da função
gets. Essa função não é recomendada e foi obsoletada. Se ler o manual dele, irá encontrar o seguinte trecho:
$ man gets
...
BUGS
Nunca use gets(). Porque é impossível dizer sem saber com antecedência a quantidade de caracteres que gets() vai ler, e porque gets() continuará a armazenar caracteres após o final do buffer, é extremamente perigoso usar. Ele já foi usado para quebrar a segurança de computadores. Use fgets () em vez disso.
Você pode optar por
fgets, ou até
std::cin:
if (fgets (qual, 256, stdin) == NULL) { // ERRO }
Em geral, essas funções possuem algum retorno para validar a execução. Use isso ao seu favor.
E por que eu usei 256 ao invés de
sizeof(qual)? sizeof apenas irá resolver o tamanho de
qual, ou seja, o tamanho de
char*. Para saber o tamanho da string, existe a função
strlen.
E por fim temos a iteração de
i até o inicio do nome.
for(int i=sizeof(qual);i>=0;i--) {
cout<<qual<<endl;
}
Cada iteração imprime
qual, mas você deseja imprimir o caractere que compõem o índice de
i:
for(int i=sizeof(qual) - 1;i>=0;i--) {
cout<<qual[ i ]<<endl;
}
Se você está estudando C++, recomendaria utilizar
std::string ao invés de alocar manualmente
qual. Se estiver estudando alocação de memória em C++, prefira o operador
new:
char * qual = new char[256];
...
delete [] qual;
Neste exemplo eu utilizei o operador
delete para devolver a memória alocada. No seu código deveria ser utilizado a função
free:
free(qual);