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)
J'entre un texte sur str de
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; }
- 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
Partager