Bonjour, je suis amené à refaire du C, mais j'aimerais acquérir les bonnes méthodes de programmation:
Admettons le code suivant:
1/ Les initialisations sont bonnes ?
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <stdio.h> #include <string.h> #include <stdlib.h> void print_str(const char *pstr) { printf("%s", pstr); } int main() { char strz = 0; char *strn = NULL; char *dest = NULL; char strc[10] = {0}; // Cas N°1 : Affichage d'une chaine constante print_str("bordeleuhdemerdeuh"); // Cas N°2 : Allocation dynamique strn = (char *)malloc(sizeof(char) * 2); if (strn == NULL) perror("bad allocation!\n"); strn = "bordeleuh"; printf("%s", strn); // Cas N°3 : Allocation statique int r = strcpy_s(dest, 10, "biduletruc"); if (r!=0) { perror("Bad copy\n"); return -1; } getchar(); return 0; }
2/ Le cas 2 fonctionne et ne plante pas, à ma grande surprise, comment se fait-il? Compte-tenu de l'allocation dynamique de strn, elle n'est pas assez grande? Il ne fait pas de realloc auto, si?
3/ Le cas 3 crash sans surprise,strcpy_s n'a pas de safe method pour éviter de copier dans dest une chaîne trop grande ? Le seul choix possible est de faire un strlen("chaine") avant de faire le strcpy ?
Le but était de provoquer des crashs pour ajouter des safe method de contrôle.
Merci.
Partager