Bonjour à tous,
Je ne suis pas du genre à poster des messages demandant de l'aide, mais ce problème me rend fou et j'ai rien trouvé d'interessant à propos de ça sur le net, alors je me tourne vers vous.
Voici le problème :
Dans une fonction, j'appelle mon strlen modifié qui compte les caractères d'un pointeur sur char jusqu'au \0.
Seulement, lorsque je printf le return de ce strlen modifié, il affiche la mauvaise valeur.
Exemple, je demande de compter combien il y a de caractères dans une chaîne qui fait 150 caractères ... la fonction me renverra une valeur négative, par exemple.
La chose curieuse, c'est que ce strlen modif marche très bien pour les valeurs < 100, mais dès que ça commence à être un peu plus gros il déconne.
Chose encore plus étonnante, si je printf la valeur avant de return, il a bien la valeur escomptée, même si la chaîne est supérieure à 100 caractères.
Pour résumer et illuster, je vous fait un petit code :
L'output correspondrait à -88, ou une valeur érronée, peu importe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(void) { char *str = "chaine de 130 caractères"; // dans l'exemple, c'est fait à l'arrache, mais cette chaîne est allouée et terminée par un \0 dans mon programme printf("%d\n", strlen_mod(str)); return (0); }
Cependant :
Ce printf en revanche me donne la bonne valeur, il a bien compté jusqu'au bout...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int strlen_mod(char *str) { int i = 0; while (str[i] != 0) i++; printf("%d\n", i); return (i); }
Des idées ? Je peux contourner en envoyant un pointeur sur int à la place de ce "i", et ça marche très bien, mais bon c'est chiant de pas pouvoir utiliser les valeurs de retour quoi.
Merci d'avance. :3
Partager