Salutations.

Souvent, quand on est amené à manipuler de la mémoire en C, par exemple, lors que l'on a des chaines de caractères, ou que l'on doit analyser une structure "complexe" de données (images, etc...), on aimerait pouvoir résoudre de petits problèmes simples avec élégance... Si les librairies standard offrent de bons moyens de ne pas avoir à savoir coder, il est en revanche un constat accablant à faire: apprendre à bien coder éviteraient parfois de belles bourdes.

Je n'ai pas la prétention d'avoir des leçons a donner. Mais finalement, pourquoi ne pas diffuser un peut ce qui me semble utile?

Je propose donc de donner quelques exemples commentés de fonctions usuelles codées dans un style élégant, qui pourraient vous permettre d'enfin apprécier de faire un code découlant d'une logique implacable. Et le code logique et pur, c'est beau.

Strlen

strlen (string lenght) est une fonction définie dans le header de la librairie standard string.h, et ayant pour prototype "size_t strlen(const char *s);". Son role est de renvoyer la taille d'une chaine de caractères (nombres de caractères contenus dans la chaine). Une chaine correspond en réalité à un pointeur, donnant accès à une plage de caractères, et dont la fin est déterminée par un \0 (valeur à 0). Le pointeur donne l'emplacement mémoire du premier caractère de la chaine.

Comme je le disait plus haut, le C permet une manipulation de la mémoire très propre, et bien intégrée. On pourra donc coder notre fonction de strlen en utilisant les pointeurs et leur syntaxe:


/* (c)Tixlegeek 2010 - GPLv3  */
int strlen(char *str)
{
   int i=0;
   while(*(str+i)){i++;}
   return i;
}

Malgré qu'il puisse etre un peut intimidant pour les débutants (et c'est normal, ya des pointeurs :) ) on peut aisément l'expliquer et le comprendre:


int strlen(char *str)
{
   int i=0;   Déclaration de la variable i et initialisation à 0
   while(*(str+i)){i++}  Tant que la valeur *(str+i) (=valeur à l'adresse str+i) est supérieure à 0, on incrémente i.
   return i;   On est arrivé à un 0, on retourne donc la valeur de i, qui correspond au nombre de caracteres parcouru dans la boucle précédente.
}

ltrim

OOPS! L'ami Mathedit m'a fait remarqué à juste titre que ma fonction ne marchait pas! (je flagellerai ma chaire impure avec une courge molle ce soir, c'est promis) Et m'en a fait la démonstration. Je ne suis pas encore certain des circonstances du bug, mais à l'évidence, ca plante. Ce n'est que partie remise! Et merci à mathedit

Voilà. Ces deux fonctions permettent de comprendre un peut mieux l'utilité des pointeurs, et en quoi ils peuvent nous changer la vie. Ce ne sont que des exemples, mais le haut niveau n'empêche pas d'avoir à savoir programmer un minimum!