Bonjour bonjour,

J'ai un petit problème que je n'arrive pas à résoudre. Je fais une suite d'affectation de cette forme là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
char* toto = malloc (10 * sizeof(char));
toto = "blabla";
toto = "haha";
toto = "hihi"
...
A priori, j'ai l'impression qu'au lieu de revenir à zéro, il me rajoute tout à la suite, genre "blablahahahihi". Pourtant, il me semble bien que toto <=> &toto[0]...
Je vous met mon code :
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
void traduc_mot (char* chaine, pid_t pid)
{
	int i, t, lg_tab, sigcaract;
	char* morse = malloc (11 * sizeof(char));
	char one_char, one_by_one;
 
	//Stockage dans lg_tab de la longueur de chaine
	lg_tab = strlen(chaine);
 
	// Acquisition caractere par caractere
	for (i = 0; i < lg_tab; i++)
	{
		one_char = chaine[i];
 
		// Table de transcodage carcatere -> caractere morsee
		switch (one_char) {
			case 'a': morse=".-";		break;
			case 'b': morse="-...";		break;
			case 'c': morse="-.-.";		break;
			case 'd': morse="-..";		break;
                         /* beaucoup d'autre cas */
			default: morse=".";		break;
		}
		for (t = 0; t < strlen(morse); t++)
		{
			one_by_one = morse[t];
			switch (one_by_one) 
			{
				case '.': sigcaract = 16; break;
				case '-': sigcaract = 17; break;
			}
			kill (pid, sigcaract);
			pause();
		}
		kill (pid, 14);
		pause();
	}
	kill (pid, 14);
	pause();
	free(morse);
}
Cette fonction est appelée dans une boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void traduc_phrase (char* chaine, pid_t pid)
{
	int i = 0;
	char* pch = malloc (strlen(chaine) * sizeof(char));
	printf("%d\n", strlen(chaine) * sizeof(char) + 1);
 
	pch = strtok (chaine," ");/* On découpe la chaine du début jusqu'au premier espace*/
	while (pch != NULL)
	{
		traduc_mot(pch, pid);/* On appelle traduc sur le bout de chaine*/
		pch = strtok (NULL, " ");/* On redécoupe la chaine jusqu'au prochain espace */
	}
	free (pch);
}
Et dès que la phrase est trop longue (plus de 11 caractères), j'ai une segfault...

Si vous pouviez éclairer ma lanterne, je vous en serez éternellement reconnaissant