Eviter les dépassements de pile
Bonjour,
Dans le but d'améliorer le programme que je suis entrain d'écrire, je voudrais d'abord comprendre ce que c'est un dépassement.
Pour cela, j'ai écrit un petit code sous Code::Blocks (compilateur GCC)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <string.h>
#include <stdio.h>
void test(const char* buf)
{
char buffer[10];
strcpy(buffer, buf);
}
int main()
{
char str[100];
gets(str);
test(str);
printf("C'est fini !!");
return 0;
} |
J'entre un texte sur str de
- longueur 11 (puisque buffer[10] donc dépassement), aucun problème, le printf s'affiche
- longueur 27, le printf s'affiche
- longueur 28, c'est là que le programme crashe, POURQUOI SI LOIN?
Il semble que GCC possède aussi une protection contre cela (stack error) à la compilation, comment ? Merci d'avance