Opérations sur les chaînes avec la bibliothèque string.h en C

@joekakone

Joseph Konka @joekakone

03/03/2026 · 8 min

Guide complet de la bibliothèque standard : strlen, strcpy/strncpy, strcat/strncat, strcmp/strncmp, strchr, strstr et strtok pour manipuler le texte en C.

En langage C, comme les chaînes de caractères ne sont que des tableaux de char, on ne peut pas leur appliquer les opérateurs mathématiques ordinaires : écrire chaine1 = chaine2 ou chaine1 == chaine2 ne manipule que les adresses mémoire des tableaux et ne copie ni ne compare leurs contenus !

Pour effectuer ces opérations indispensables, le standard C fournit la bibliothèque spécialisée <string.h>.


1. Calculer la longueur : strlen()#

La fonction strlen() (string length) parcourt la chaîne jusqu'au caractère sentinelle '\0' et renvoie le nombre exact de caractères utiles (le '\0' n'est pas comptabilisé) :

utilisation_strlen.c
#include <stdio.h>
#include <string.h>

int main(void)
{
    char mot[] = "Programmation";

    size_t longueur = strlen(mot);
    size_t taille_memoire = sizeof(mot);

    printf("Mot                  : %s\n", mot);
    printf("Nombre de lettres    : %zu\n", longueur);        // Affiche 13
    printf("Octets en memoire RAM: %zu octets\n", taille_memoire); // Affiche 14 (avec le '\0')

    return 0;
}

2. Copier une chaîne : strcpy() et strncpy()#

On ne peut pas affecter une chaîne à une autre avec le symbole = après leur déclaration. On utilise strcpy() (string copy) ou sa version sécurisée strncpy() :

\[\mathbf{strcpy( \underbrace{\text{destination}}_{\text{Tableau récepteur}} \text{ , } \underbrace{\text{source}}_{\text{Chaîne à copier}} )}\]
copie_chaines.c
#include <stdio.h>
#include <string.h>

int main(void)
{
    char source[] = "AlgoJungle";
    char destination[30];

    // Copie intégrale
    strcpy(destination, source);
    printf("Destination apres strcpy : %s\n", destination);

    // Copie sécurisée bornée à N caractères
    char abreviation[5];
    strncpy(abreviation, source, 4);
    abreviation[4] = '\0'; // Toujours s'assurer que le '\0' final est bien posé !
    printf("Abreviation 4 lettres    : %s\n", abreviation); // Affiche : Algo

    return 0;
}

3. Concaténer (fusionner) des chaînes : strcat() et strncat()#

Pour juxtaposer une chaîne à la suite d'une autre (concaténation), on utilise strcat() (string concatenate) :

concatenation.c
#include <stdio.h>
#include <string.h>

int main(void)
{
    char message[50] = "Bonjour ";
    char nom[] = "Joseph Konka";

    // Ajoute 'nom' à la fin de 'message'
    strcat(message, nom);

    printf("Resultat : %s\n", message); // Affiche : Bonjour Joseph Konka
    return 0;
}

[!WARNING] Assurez-vous impérativement que le tableau de destination est suffisamment grand pour accueillir la chaîne initiale, la chaîne à ajouter ET le caractère nul '\0', sans quoi vous provoquerez un écrasement de mémoire.


4. Comparer deux chaînes : strcmp() et strncmp()#

[!IMPORTANT] Écrire if (chaine1 == chaine2) compare les adresses mémoires des deux tableaux (qui sont toujours différentes !). Pour comparer le contenu textuel, on doit obligatoirement utiliser strcmp() (string compare).

La fonction strcmp(s1, s2) compare les chaînes caractère par caractère selon leur code ASCII : - Elle renvoie 0 si les deux chaînes sont strictement identiques. - Elle renvoie une valeur inférieure à 0 (< 0) si s1 précède s2 dans l'ordre alphabétique. - Elle renvoie une valeur supérieure à 0 (> 0) si s1 suit s2.

comparaison_chaines.c
#include <stdio.h>
#include <string.h>

int main(void)
{
    char mdp_correct[] = "Secret123";
    char saisie[30];

    printf("Entrez le mot de passe : ");
    scanf("%29s", saisie);

    if (strcmp(saisie, mdp_correct) == 0)
    {
        printf("Acces autorise ! Bienvenue.\n");
    }
    else
    {
        printf("Mot de passe incorrect !\n");
    }

    return 0;
}

5. Rechercher dans une chaîne : strchr() et strstr()#

  • strchr(chaine, caractere) : Recherche la première apparition d'un caractère. Renvoie un pointeur vers cet emplacement ou NULL si absent.
  • strstr(chaine, sous_chaine) : Recherche la première occurrence d'un mot complet au sein d'une phrase.
recherche_texte.c
#include <stdio.h>
#include <string.h>

int main(void)
{
    char email[] = "contact@algojungle.com";

    // 1. Recherche du symbole '@'
    char *arobase = strchr(email, '@');
    if (arobase != NULL)
    {
        printf("Symbole '@' trouve a la position %td\n", arobase - email);
        printf("Domaine associe : %s\n", arobase + 1); // Affiche : algojungle.com
    }

    // 2. Recherche du mot "algo"
    char *trouve = strstr(email, "algo");
    if (trouve != NULL)
    {
        printf("Le mot cle 'algo' a bien ete detecte !\n");
    }

    return 0;
}

6. Réimplémentation manuelle de strlen et strcmp#

Comprendre ces fonctions consiste à savoir les réécrire vous-même :

reimplementation_string.c
#include <stdio.h>

size_t MonStrlen(const char *s)
{
    size_t longueur = 0;
    while (s[longueur] != '\0')
    {
        longueur++;
    }
    return longueur;
}

int MonStrcmp(const char *s1, const char *s2)
{
    while (*s1 != '\0' && (*s1 == *s2))
    {
        s1++;
        s2++;
    }
    return (unsigned char)*s1 - (unsigned char)*s2;
}

Vous maîtrisez désormais tout l'arsenal de manipulation textuelle en C. Résolvons maintenant des cas d'application concrets dans la section d'exercices.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue