bonjour

j'ai un petit problème avec une fonction pour compter des caractères

voila la 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
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int nombre_lettre(char *chaine)
{
    int i=0; // on initialise i à 0
    while(chaine[i]!='\0') { i++; }
    //while(*(chaine+i)!='\0') { i++; }
    /*
    pour chaque itération, on prends la valeur dans la case correspondant nième lettre
    passage par adresse
    identique a un chaine[i]
    on incrémente le compteur
    on retourne i-1 car sinon on compte le terminator \0
    */
    return i-1;
}
 
int main(void)
{
    char *phrase= (char*)malloc(20*sizeof(char));
    printf("Entrez la phrase :\n");
    //scanf("%s",phrase);
    //vider();
    fgets(phrase,20,stdin);
    //vider();
    printf("\nPHRASE\n%s",phrase);
    printf("\nLONGUEUR\n%d",strlen(phrase));
    printf("\nLONGUEUR\n%d",nombre_lettre(phrase));
    return 0;
}
à l'exécution, quand je passe 2 caractères ma fonction en compte 2 et strlen 3

quand je passe 30 caractères ma fonction en compte 18 et strlen 19

je n'arrive pas à comprendre d'où vient le problème alors que théoriquement ma fonction devrait compter 19 caractères ( on ne prends pas le terminator \0)

à votre avis c'est dû à quoi ?

merci