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à :
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]...
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" ...
Je vous met mon code :
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
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); }
Et dès que la phrase est trop longue (plus de 11 caractères), j'ai une segfault...
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); }
Si vous pouviez éclairer ma lanterne, je vous en serez éternellement reconnaissant
Partager