Comportement bizarre des chaînes de caractère
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:
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:
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:
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 :hola:
:merci: