Initialisations / Allocations - Safe Methods
Bonjour, je suis amené à refaire du C, mais j'aimerais acquérir les bonnes méthodes de programmation:
Admettons le code suivant:
Code:
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;
} |
1/ Les initialisations sont bonnes ?
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.