IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Étude détaillée du module String de la libc


précédentsommairesuivant

I. Introduction

Tous les livres habituels soit ne couvrent pas toutes les fonctions du Langage C, soit ne font pas d'études détaillées. Cet article aura donc pour but unique de vous en apprendre plus sur les fonctions de gestion des chaines de caractères et des blocs mémoire, soit le module String standard de la libc.

Outre l'étude de ces fonctions, nous allons voir également un algorithme naïf pour chacune d'entre elles et l'implémentation en Langage C. Ici ne sera pas écrite une implémentation optimisée, mais une implémentation naïve dans un but didactique uniquement afin de mieux comprendre le fonctionnement et cela permettra également de voir comment programmer sans utiliser la libc standard !

Les fonctions étant nombreuses dans ce module, chaque chapitre correspondra à une fonction dont l'organisation sera la suivante :

  • Prototype ;
  • Description et Comportement ;
  • Algorithme ;
  • Implémentation ;
  • Tests.

Les conventions de nommage utilisées pour nos fichiers, fonctions et autres types sont simples : chaque nom de fonction, type et fichier sera précédé par c_ ! Il est fait ainsi pour éviter d'utiliser implicitement les fonctions standard au lieu de nos propres fonctions.

I-A. Remerciements

Un grand merci à hiko-seijuro d'avoir écrit la partie sur la complexité des algorithmes ainsi qu'à Alp et à julp pour la relecture attentive et la correction de cet article !

I-B. Prérequis

Pour suivre cet article confortablement, il est nécessaire d'avoir de très bonnes notions en C, particulièrement sur les pointeurs et l'arithmétique des pointeurs sans oublier des notions sur les chaines de caractères. Si vous n'avez pas ces connaissances, je vous suggère d'en acquérir les bases en lisant au moins les articles suivants :

I-C. Préparatifs

Avant de pouvoir entrer dans le vif du sujet, il nous faut préciser certaines choses. En effet, nous n'allons ici pas utiliser la bibliothèque standard du C, sauf pour le main qui nous permettra de tester nos fonctions. Il nous faudra donc un minimum et pour cela, nous allons créer notre propre fichier stddef.h donc dans notre cas, le fichier se nommera c_stddef.h et nous y mettons ce dont nous avons besoin, soit :

Fichier c_stddef.h
Sélectionnez
#ifndef _H_CSTDDEF
#define _H_CSTDDEF
 
 
#undef NULL
#define NULL ((void *) 0)
 
 
typedef unsigned int c_size_t;
 
 
#endif /* _H_CSTDDEF */

Ici nous commençons par redéfinir NULL pour mettre en place notre propre implémentation. Ici rien de standard, car cette définition peut être sensiblement différente suivant les systèmes.

Nous allons également souvent travailler avec des données de longueurs de chaines de caractères (entre autres), nous aurons donc aussi besoin du type size_t ou dans notre cas c_size_t qui est généralement utiliser pour des données de longueurs, des index de tableaux, des retours de fonctions comme strlen et bien d'autres.

Il est à noter que même si nous utilisons ici en réalité un type unsigned int, l'implémentation réelle peut être différente suivant les systèmes d'exploitation. Il se peut donc très bien que le type size_t que vous utilisez dans la libc standard couvre un autre type par exemple unsigned long !

Dans tout le document, les prototypes des fonctions se trouveront dans un fichier nommé c_string.h et les définitions dans un fichier c_string.c !

Les algorithmes présentés dans les différents chapitres sont des algorithmes génériques et n'utilisent par conséquent aucune notion de pointeurs ce qui aura pour résultat des implémentations sensiblement différentes par rapport aux algorithmes !

Les fonctions strcoll et strxfrm ont été volontairement omises ! En effet, celles-ci sont étroitement liées à la localisation courante et se basent donc sur la variable d'environnement COLLATE (pour strcoll essentiellement) et cela conduirait donc à créer d'autres parties de la libc ce qui n'est pas du tout le but de cet article ! Le premier but de cet article est en effet de programmer soi-même les fonctions de gestion des chaines de caractères et blocs mémoire de la libc en partant de zéro !


précédentsommairesuivant

Copyright © 2007 Franck Hecht. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.