Gets para Ler String em C
A função gets, a princípio eu pensei em nem colocar essa função aqui no conteúdo do curso e já já você vai entender por que; porém existe tanto conteúdo na internet sobre essa função que eu achei melhor colocar para que você conheça essa função e saiba que você não deve utilizá la, mas já já você vai entender por que.
A função gets, perceba, o get, ele vem do inglês de pegar, a gente pode entender ele, pode traduzir como pegar, e esse s aqui é o s de string, pegar uma string, e aí vamos entender como funciona essa função.
A função é bastante simples para ser utilizada e ela recebe como parâmetro apenas o vetor onde salvará a string, então seu uso é bastante simples.
Para utilizar a função, basta fazer isso aqui, gets, entre o par de parênteses eu passo aqui o nome do meu vetor, nesse caso nome, tudo o que for digitado será salvo do vetor.
E aí já tem um problema aqui, qual o tamanho do nosso vetor?
Isso aqui não é porque e omiti o tamanho do vetor nome não, é para você pensar mesmo, qual o tamanho do vetor?
Observe a palavrinha que eu coloquei aqui, tudo o que for digitado será salvo no nosso vetor nome, e tudo é muita coisa, você concorda?!?
Se o usuário digitar uma palavra lá de cinco caracteres, ele vai salvar no nosso vetor nome, se o usuário digitar cem caracteres, ele vai salvar no nosso vetor nome, se o usuário digitar cinco mil caracteres, ele vai salvar no nosso vetor nome, você percebeu que isso pode gerar um problema?
Se o o nosso vetor tiver, por exemplo, tamanho cem, o usuário vem aqui e digita trezentos caracteres, lembra que um vetor é uma sequência de caixinhas na memória do computador, sequencial, um após o outro; se a gente tem um vetor aqui de cem posições, imagine que o cem terminou aqui, essa aqui é a nossa posição de número noventa e nove, se o usuário digitar trezentos caracteres, ele vai continuar colocando os caracteres aqui de forma sequencial na memória, só que essa memória não pertence ao nosso programa, essa memória pode
está vazia ou essa memória pode estar sendo usado por algum…, utilizada por algum outro programa, percebeu o risco?
E aí eu chego no ponto chave da função gets, você não deve utilizar essa função nunca!Para exercício, para praticar, você até pode utilizar, mas em um trabalho, em um projeto real, você nunca deve usar essa função, essa função é insegura, ela pode trazer uma série de problemas para o seu programa, então seu uso deve ser evitado ao máximo, inclusive, muitos compiladores emitem uma mensagem de alerta quando eles identificam que você está usando a função gets, ela pode trazer uma série de problemas, inclusive de segurança para o seu programa, para o seu aplicativo.
Vamos ver o uso dessa função lá no Code Blocks e ver se o Code Blocks emite algum alerta?
Então vem comigo!
Eu estou aqui então na IDE Code Blocks e eu tenho aqui um exemplo com a função gets, olha só, eu criei aqui um vetor, nome completo, tamanho cinquenta,”digite seu nome completo” e aqui, perceba, o uso da função é extremamente simples, ela recebe o nome do vetor, onde ela vai salvar tudo o que for lido, até que a tecla enter seja pressionada, e aí na sequência eu vou imprimir aqui o conteúdo do nosso vetor.Eu vou aqui exibir a nossa linha de logs, se ele emitir alguma mensagem, vai aparecer por aqui, vamos ver, eu vou tentar compilar e executar que o meu programa, aparentemente ele não emitiu nenhuma mensagem e eu acredito que se deva ao fato da função gets ter sido descontinuada nas versões mais recentes da linguagem C; se você for olhar a documentação da versão mais recente, se eu não me engano é de dois mil e dezoito, nem existe mais a função gets, foi descontinuada, mas os compiladores ainda mantêm a compatibilidade com versões mais antigas, então olha só, se eu digitar aqui a nossa usuária padrão, Maria Madalena, vou pressionar enter, nós temos aqui Maria Madalena, perceba que ele leu sem nenhum problema, salvou no nosso vetor e não deu aqui, não emitiu nenhum alerta para a gente; isso aqui no Code Blocks.
Novamente, dependendo do compilador que você esteja utilizando, ele vai emitir alguns alertas; e aí eu quero mostrar isso para você.
Eu tenho aqui um outro exemplo que eu quero mostrar, neste site aqui, olha só nós temos aqui um compilador online que serve para você praticar, se você não quiser instalar nada no seu computador, online gdb ponto com (onlinegdb.com), você pode utilizar, perceba aqui, é a área onde a gente vai escrever o nosso código, e você pode utilizar ele para uma diversidade de linguagens, olha só, C, C++, Java, Python, PHP, C sharp (C#), VB, HTML,CSS, JavaScript, Ruby, Pascal, R, Fortran …, então tem uma variedade de linguagens aqui bem grande.
Eu estou utilizando a linguagem C, eu vou escolher aqui a linguagem C e o programinha que eu tenho aqui é exatamente o mesmo, olha só, um vetor chamado nome completo, eu peço para o usuário digitar e estou lendo com a função gets.
Vamos ver o que vai acontecer aqui?
Eu vou aumentar aqui a nossa “abinha” de logs, ele vai imprimir algumas mensagens aqui para a gente; eu tenho aqui o botão run, esse run vai compilar e executar o nosso programa, olha só, eu vou pressionar ele uma vez, olha a quantidade de coisas que apareceu aqui para a gente; vamos entender o que ele está mostrando aqui para a gente.
Perceba que o programinha funcionou, olha, digite seu nome completo e ele está aguardando aqui eu digitar o meu nome; porém, olha o tanto de coisa que ele imprimiu antes, vamos entender o que aconteceu aqui.
Warning, isso aqui já significa aviso, e ele está dizendo gets, olha só, a função que a gente usou foi descontinuada, é isso aqui significa essa mensagem aqui, é uma função antiga, que foi descontinuada, toda vez que você ver essa palavrinha aqui em alguma função, significa que ela é uma função velha, antiga, descontinuada, e você deve ao máximo evitar o uso dessa função.
Na sequência, ele continuou com mais mensagens, olha só, main ponto c warning, outro aviso, d gets function is dangerous, and it should not be used, a função gets é perigosa, e você não deveria utilizá-la, basicamente é isso que ele está dizendo aqui para a gente.
Então perceba, dependendo do compilador que você utiliza, ele vai te dar mensagens a respeito do seu código, da função que você está usando, então se eu digitar aqui o nosso usuário padrão, Maria Madalena, ele vai funcionar corretamente, porém ele está te avisando “Olha, essa função é perigosa e você não deveria usá la, se você utilizar é por sua conta e risco”.
Então nessa aula nós aprendemos mais uma função e também nós aprendemos por que você não deveria utilizá la.