Aller au contenu principal
U/
Mémoire
c

Allouer, copier, libérer une chaîne avec malloc

Lire une chaîne sur stdin, la dupliquer dans une zone allouée dynamiquement avec malloc et strncpy, l'afficher, puis libérer la mémoire sans fuite.

30 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Le programme lit une ligne sur stdin (au plus 256 caractères) avec fgets. Il calcule la longueur de la chaîne avec strlen, alloue un tampon de taille longueur + 1 avec malloc, vérifie que le pointeur retourné n'est pas NULL, copie la chaîne d'origine dans ce nouveau tampon avec strncpy en s'assurant que le terminateur \0 est bien présent, imprime le tampon sur stdout, puis appelle free. Aucune fuite mémoire ne doit être détectée par Valgrind.

Contraintes

  • Compilé avec gcc -Wall -Wextra -std=c99 -o copie copie.c.
  • Vérifier le retour de malloc : si NULL, afficher "Erreur d'allocation" sur stderr et quitter avec le code 1.
  • Utiliser strncpy(dest, src, len) avec dest[len] = '\0' pour garantir la terminaison.
  • Ne pas utiliser strdup (non C99 standard).
  • Vérifiable avec valgrind --leak-check=full ./copie.

Exemple

Entrée :

Programmation en C

Sortie :

Programmation en C

Exécution sous Valgrind :

LEAK SUMMARY:
   definitely lost: 0 bytes in 0 blocks
   indirectly lost: 0 bytes in 0 blocks
Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.