Bonjour.
Je suis étudiant en BTS IRIS et nous travaillons à mon grand plaisir avec Visual C++.
J'ai un petit programme a faire en TP je suis à 2 doigts de finaliser celui-ci mais il y a encore quelquechose qui me pose problème.
Il s'agit de retourner une chaine de caractère que l'on obtiens d'une fonction
J'ai donc fait mes recherches et j'ai trouvé ceci dans les FAQ de ce site :
FAQ C - Section sur les fonctions
Comment créer une fonction qui retourne une chaîne de caractères ?
auteurs : Bob, LFE

Pour retourner une chaîne de caractères, il faut passer à la fonction un pointeur en paramètres et copier la chaîne dans la zone mémoire pointée (avec strcpy() par ex.).

Une autre façon de faire est de déclarer la fonction comme retournant un pointeur sur des caractères et d'allouer la mémoire dans la fonction sans la libérer dans celle-ci, mais dans la fonction appelante.
Voici d'autre part des extraits de mon code qui constitue une application en mode console :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 
int main(void)
{
	// Il s'agit là du code qui me permet de tester ma fonction
	int aff;
	char mot[2];
	char *pmot = &mot[0];
	cout << "Aff : " << endl;
	cin >> aff ;
	pmot = affecte(aff);
 
	cout << *pmot << *(pmot+1);
 
	getch();
	return 0;
}
 
char *affecte(int reste)
{
	char	syllabe[2];
	char	*psyllabe = &syllabe[0];
 
	switch (reste)
	{
	case 0 :
		*psyllabe = 'H';
		*(psyllabe+1) = 'o';
		break;
	case 1 :
		*psyllabe = 'H';
		*(psyllabe+1) = 'a';
		break;
	case 2 :
		*psyllabe = 'H';
		*(psyllabe+1) = 'e';
		break;
	case 3 :
		*psyllabe = 'H';
		*(psyllabe+1) = 'i';
		break;
	case 4 :
		*psyllabe = 'B';
		*(psyllabe+1) = 'o';
		break;
	case 5 :
		*psyllabe = 'B';
		*(psyllabe+1) = 'a';
		break;
	case 6 :
		*psyllabe = 'B';
		*(psyllabe+1) = 'e';
		break;
	case 7 :
		*psyllabe = 'B';
		*(psyllabe+1) = 'i';
		break;
	case 8 :
		*psyllabe = 'K';
		*(psyllabe+1) = 'o';
		break;
	case 9 :
		*psyllabe = 'K';
		*(psyllabe+1) = 'a';
		break;
	case 10 :
		*psyllabe = 'K';
		*(psyllabe+1) = 'e';
		break;
	case 11 :
		*psyllabe = 'K';
		*(psyllabe+1) = 'i';
		break;
	case 12 :
		*psyllabe = 'D';
		*(psyllabe+1) = 'o';
		break;
	case 13 :
		*psyllabe = 'D';
		*(psyllabe+1) = 'a';
		break;
	case 14 :
		*psyllabe = 'D';
		*(psyllabe+1) = 'e';
		break;
	case 15 :
		*psyllabe = 'D';
		*(psyllabe+1) = 'i';
		break;
	default :
		*psyllabe = 'x';
	}
 
	cout << "Syllabe : " << psyllabe << endl; // DEBUG // */
 
	return psyllabe ;
}
J'ai suivi l'exemple d'un livre sur C++ que je possède chez moi mais ça ne donne rien de convainquant.

Quand je vérifie ma chaine avant de la retourner elle est comme je le désir. (Notez au passage la manière un peu idiote d'affecter la chaine de caractère mais c'est venu des resultats que j'ai pu avoir avec la valeur testée)

Problème il ne reste plus que le 1er caractère dans mon main. J'ai pensé à un problème de portée mais j'ai appliqué la même logique que l'exemple que j'ai tiré du manuel dont je parle plus haut, mon professeur a misé sur un mauvais positionnement du caractère NULL ( I mean \0). Quelqu'un pourrait-il m'expliquer le pourquoi (ça ne marche pas) et le comment (appliquer corrèctement le principe cité dans la FAQ - Qu'ai-je mal fait ? -) ?

D'avance merci.