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 : Sélectionner tout - Visualiser dans une fenêtre à part
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