#include <stdio.h>
#include <string.h> // contient la déclaration de la fonction strlen()
#define LMAX 10

/* Déclaration de la fonction my_strlen() :
Fonction qui calcule et renvoie la longueur de la chaine de caractères str passée en paramètre*/
size_t my_strlen(const char *str);


int main()
{
	char tab [LMAX + 1];// LMAX caractères + le caractère '\0'
	size_t lo;
	
	printf("Saisir une chaine (longueur max %d) : ", LMAX);
	
	// la saisie de la chaîne de caractères est sécurisée : pas de risque de débordement de tableau
	fgets(tab, LMAX+1, stdin);
	
	printf("Chaine saisie : %s\n",tab);
	lo = my_strlen(tab);
	printf("Longueur de la chaine saisie : %u, verif : %u\n",lo , strlen(tab));
	printf("\nPour debug, code ASCII en hexa du dernier caractere de la chaine: %x\n", tab[lo -1]);
	
	/*Remarques:
	Soit N le nombre de caractères saisis par l'utilisateur avant d'appuyer sur la touche Entrée :
	- si N < LMAX, alors :
			- la fonction fgets() place dans tab un '\n' suivi d'un '\0', après le dernier caractère saisi (le Nième)
			- au retour de l'appel de fgets(), le tampon associé à l'entrée standard est vide
	- sinon (c'est à dire si N >= LMAX) :
			- la fonction fgets() place les LMAX premiers caractères saisis dans tab
			- et elle place à la suite de ces LMAX caractères un '\0' (cet '\0' est donc situé à l'indice LMAX)
			- au retour de l'appel de fgets(), le tampon associé à l'entrée standard n'est pas vide : il contient les N-LMAX derniers caractères
			et un '\n'
			
	Notez que dans ce programme, on ne distingue pas le cas N = LMAX (où l'utilisateur respecte la consigne) 
	du cas N > LMAX (où l'utilisateur ne respecte pas la consigne). Cette distinction est réalisée dans le corrigé de l'exercice 8.
	*/
	return 0;
}




// le type du paramètre (const char *) interdit à la fonction de modifier les caractères de la chaîne reçue en paramètre 
size_t my_strlen(const char *str)
{
	size_t l = 0;
	// on recherche la position du 1er caractère nul à partir de l'adresse reçue
	while (str[l] != '\0')
	{
		++l;
	}
	return l;
}