0Pricing
C Academy · Leçon

strlen, strcpy, strcat

Fonctions essentielles sur les chaînes

strlen, strcpy, strcat est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.

Les chaînes en C

En C, une chaîne est simplement un tableau de char qui se termine par un caractère spécial appelé terminateur nul : '\0'.

Les fonctions de <string.h> s'appuient sur ce terminateur pour savoir où se termine une chaîne. Sans lui, elles lisent au-delà de la fin de votre tableau.

#include <stdio.h>

int main(void) {
    char name[] = "Alice";
    printf("%s\n", name);
    printf("Bytes used: %lu\n", sizeof(name));
    return 0;
}

Inclure string.h

Pour utiliser les fonctions de manipulation des chaînes, vous devez inclure l'en-tête :

  • #include <string.h>

Vous disposez ainsi de strlen, strcpy, strcat, strcmp, entre autres.

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

int main(void) {
    char greeting[] = "Hello";
    printf("Length is %lu\n", strlen(greeting));
    return 0;
}

strlen : compter les caractères

strlen renvoie le nombre de caractères avant le terminateur nul. Il ne compte pas '\0' lui-même.

Ainsi, strlen("cat") renvoie 3, même si le tableau contient 4 octets.

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

int main(void) {
    char word[] = "cat";
    printf("strlen = %lu\n", strlen(word));
    printf("sizeof = %lu\n", sizeof(word));
    return 0;
}

strlen est en O(n)

Comme les chaînes C ne stockent pas leur longueur, strlen doit parcourir chaque caractère jusqu'à trouver '\0'.

Il s'agit donc d'une opération en O(n). Évitez de l'appeler répétitivement dans la condition d'une boucle pour de grandes chaînes.

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

int main(void) {
    char msg[] = "programming";
    size_t len = strlen(msg);
    for (size_t i = 0; i < len; i++) {
        printf("%c", msg[i]);
    }
    printf("\n");
    return 0;
}

strcpy : copier des chaînes

Vous ne pouvez pas copier des chaînes avec =. Utilisez strcpy(dest, src), qui copie src dans dest, terminateur nul compris.

La destination doit être assez grande pour contenir la source et le terminateur.

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

int main(void) {
    char src[] = "Hello";
    char dest[20];
    strcpy(dest, src);
    printf("%s\n", dest);
    return 0;
}

strcpy : danger de dépassement du tampon

Si dest est trop petit, strcpy écrit au-delà du tampon et corrompt la mémoire. Il s'agit d'un bogue de sécurité classique.

Préférez strncpy(dest, src, n), qui copie au plus n octets. Attention : strncpy peut ne pas ajouter de terminateur nul si src est trop long.

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

int main(void) {
    char src[] = "LongString";
    char dest[5];
    strncpy(dest, src, 4);
    dest[4] = '\0';
    printf("%s\n", dest);
    return 0;
}

strcat : concaténer des chaînes

strcat(dest, src) ajoute src à la fin de dest. L’écriture commence au terminateur nul de dest et en ajoute un nouveau à la fin.

dest doit déjà être une chaîne valide disposant de suffisamment d’espace libre.

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

int main(void) {
    char buffer[20] = "Hello, ";
    strcat(buffer, "World");
    printf("%s\n", buffer);
    return 0;
}

Construire des chaînes étape par étape

Vous pouvez enchaîner strcpy et strcat pour construire une chaîne morceau par morceau.

Commencez toujours par un tampon initialisé afin que le premier strcat trouve un terminateur valide.

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

int main(void) {
    char full[50];
    strcpy(full, "Mr. ");
    strcat(full, "John ");
    strcat(full, "Smith");
    printf("%s\n", full);
    return 0;
}

Concaténation plus sûre avec strncat

strncat(dest, src, n) ajoute au plus n caractères de src, puis ajoute toujours un terminateur nul.

Cela contribue à éviter les dépassements lorsque la longueur de la source est inconnue.

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

int main(void) {
    char dest[16] = "Data: ";
    char src[] = "1234567890";
    strncat(dest, src, 5);
    printf("%s\n", dest);
    return 0;
}

Valeurs de retour

strcpy et strcat renvoient tous deux un pointeur vers dest. Cela vous permet d’imbriquer les appels, même si la lisibilité peut en pâtir.

strlen renvoie un size_t, qui est non signé. Soyez prudent lorsque vous le comparez à des entiers signés.

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

int main(void) {
    char a[20] = "foo";
    char b[] = "bar";
    printf("%s\n", strcat(a, b));
    return 0;
}

Piège courant lors de l’allocation

Une erreur fréquente consiste à oublier le +1 du terminateur nul lors du dimensionnement d’un tampon.

Pour une chaîne de longueur n, vous avez besoin de n + 1 octets. La longueur combinée de deux chaînes concaténées est strlen(a) + strlen(b) + 1.

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

int main(void) {
    char a[] = "abc";
    char b[] = "de";
    size_t needed = strlen(a) + strlen(b) + 1;
    printf("Need %lu bytes\n", needed);
    return 0;
}

Vérification rapide

Vérifiez votre compréhension des longueurs de chaînes.

Récapitulatif

Vous avez découvert les principales fonctions de string.h :

  • strlen compte les caractères avant '\0' (O(n)).
  • strcpy copie une chaîne ; la destination doit être suffisamment grande.
  • strcat ajoute du contenu à une chaîne existante.
  • Réservez toujours de l’espace pour le terminateur nul et préférez les variantes strn* pour plus de sécurité.

Questions Fréquemment Posées

La leçon « strlen, strcpy, strcat » est-elle gratuite ?

Oui — le texte complet de « strlen, strcpy, strcat » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « strlen, strcpy, strcat » ?

Fonctions essentielles sur les chaînes Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C Academy ?

Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « strlen, strcpy, strcat » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C Academy ?

Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. strlen, strcpy, strcat
  2. strcmp et comparaison
  3. strtok et tokenisation
  4. memcpy et memset
← Retour à C Academy