Programar em C/Entrada e saída simples: diferenças entre revisões

[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
Linha 409:
gets(ponteiro_para_string);
 
<source lang="c">
char c;
c = getchar();
</source>
 
No entanto, existe um problema com a função <tt>gets()</tt>. Veja o exemplo a seguir:
 
<source lang="c">
#include <stdio.h>
Linha 424 ⟶ 427:
return 0;
}
</source>
 
A notação <tt>char buffer[10]</tt>, que ainda não foi introduzida (e será detalhada na seção [[../Vetores|Vetores (arrays)]]), pede que seja reservado um espaço para 10 caracteres para a string <var>buffer</var>. Portanto, se usuário digitar mais de 9 caracteres (pois o terminador de string é adicionado ao que o usuário digitou), os caracteres excedentes adicionais serão colocados na área de memória subsequente à ocupada pela variável, escrevendo uma região de memória que não está reservada à string. Este efeito é conhecido como "estouro de buffer" e pode causar problemas imprevisíveis. Por isso, '''não se deve usar a função gets()'''; mais tarde introduziremos a função fgets(), que não apresenta esse problema e que deve ser usada no lugar de gets().