Estou aprendendo C e rapidamente encontrei meu primeiro problema neste tutorial . Aqui está o código:
#include <stdio.h>
#include <stdbool.h>
static char buffer[10];
int main(int argc, char **argv) {
puts("Lispy VERSION 0.0.0.0.1");
puts("Press Ctrl+c to exit\n");
while (true) {
fputs("Lispy> ", stdout);
fgets(buffer, 2048, stdin);
printf("No you are a %s", buffer);
}
return 0;
}
Neste código, eu queria testar o que acontece se o segundo parâmetro max_count
da fgets
função exceder o tamanho do buffer
. Para minha surpresa, o programa rodou perfeitamente, sem erros, e o compilador não me avisou sobre possíveis problemas.
Usei o recurso de depuração no meu editor e descobri que se eu inserir uma string como HELLLOOOOOOOOOOOOOOOOOOOOOOO
, a situação da memória fica assim:
Como mostrado na captura de tela acima, parece que toda a string de entrada está armazenada corretamente na memória! Também parece que o tamanho de buffer
não é exatamente o que eu especifiquei (10 bytes). Se fossem 10 bytes, a linha printf("No you are a %s", buffer);
deveria imprimir apenas 10 bytes, mas imprimiu a string inteira "HELLLOOOOOOOOOOOOOOOOOOOOOOOOO".
Isso significa que eu realmente acessei memória além do tamanho alocado do buffer
?