Bonjour, je suis amené à refaire du C, mais j'aimerais acquérir les bonnes méthodes de programmation:

Admettons le code suivant:

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;
}
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.