La fonction strncpy
(string copy with length) est une version plus sécurisée de strcpy
qui limite la quantité de caractères copiés d’une chaîne source à une destination. Cependant, elle a des comportements spécifiques qu’il faut bien comprendre pour éviter les erreurs.
strncpy
char *strncpy(char *destination, const char *source, size_t n);
destination
: Le tableau où les caractères seront copiés.source
: La chaîne à copier.n
: Nombre maximal de caractères à copier.destination
.strncpy
n
caractères : source
est inférieure à n
, tous les caractères sont copiés, y compris le caractère nul (\0
).source
est supérieure ou égale à n
, seuls les n
premiers caractères sont copiés, mais sans garantir l’ajout de \0
.source
contient moins de n
caractères, les caractères restants dans destination
sont remplis avec des zéros (\0
).strcpy
, strncpy
ne garantit pas que la chaîne résultante sera terminée par un caractère nul (\0
) si la longueur de source
est supérieure ou égale à n
.n
source
sont copiés, et les caractères restants dans destination
sont remplis avec des zéros (\0
).#include <stdio.h>
#include <string.h>
int main() {
char source[] = "C";
char destination[5];
strncpy(destination, source, 5); // Remplit les caractères restants avec `\0`
printf("Destination : ");
for (int i = 0; i < 5; i++) {
printf("%c ", destination[i] == '\0' ? '_' : destination[i]);
}
printf("\n");
return 0;
}
Sortie :
Destination : C _ _ _ _
n
n
premiers caractères sont copiés.\0
) n’est ajouté automatiquement.#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Programmation";
char destination[5];
strncpy(destination, source, 4); // Copie seulement les 4 premiers caractères
destination[4] = '\0'; // Ajouter manuellement `\0`
printf("Destination : %s\n", destination);
return 0;
}
Sortie :
Destination : Prog
source
est vide (""
), destination
sera remplie avec des zéros (\0
) jusqu’à n
.#include <stdio.h>
#include <string.h>
int main() {
char source[] = "";
char destination[5];
strncpy(destination, source, 5);
printf("Destination : ");
for (int i = 0; i < 5; i++) {
printf("%c ", destination[i] == '\0' ? '_' : destination[i]);
}
printf("\n");
return 0;
}
Sortie :
Destination : _ _ _ _ _
strncpy
strncpy
source
est plus longue que n
, le caractère nul (\0
) n’est pas ajouté à destination
, ce qui peut entraîner des comportements imprévisibles.\0
à la fin de destination
si nécessaire.source
est plus courte que n
, les caractères restants dans destination
sont remplis avec des zéros, ce qui peut être inefficace dans certains cas.strncpy
destination
: destination
est suffisamment grand pour contenir la chaîne copiée.\0
si nécessaire : strncpy
, terminez toujours la chaîne avec destination[n-1] = '\0'
.snprintf
pour plus de sécurité : snprintf
au lieu de strncpy
.Copiez une chaîne source dans une destination en limitant la copie à 10 caractères. Assurez-vous que destination
est toujours terminée par \0
.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Programmation en C";
char destination[11]; // 10 caractères + 1 pour `\0`
strncpy(destination, source, 10);
destination[10] = '\0'; // Assurez la terminaison
printf("Destination : %s\n", destination);
return 0;
}
Créez un tableau de 10 caractères. Copiez une chaîne courte et affichez les caractères restants remplis par des zéros.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "C";
char destination[10];
strncpy(destination, source, 10); // Les caractères restants sont remplis avec `\0`
printf("Destination : ");
for (int i = 0; i < 10; i++) {
printf("%c ", destination[i] == '\0' ? '_' : destination[i]);
}
printf("\n");
return 0;
}
Écrivez un programme qui vérifie si destination
a suffisamment d’espace pour copier la chaîne source
en toute sécurité.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Programmation";
char destination[8];
if (strlen(source) >= sizeof(destination)) {
printf("Erreur : espace insuffisant pour copier la chaîne.\n");
} else {
strncpy(destination, source, sizeof(destination) - 1);
destination[sizeof(destination) - 1] = '\0';
printf("Destination : %s\n", destination);
}
return 0;
}
strcpy
Critère | strcpy | strncpy |
---|---|---|
Terminaison par \0 | Toujours | Non garanti si n est atteint. |
Gestion de dépassement | Non sécurisé, dépassement possible | Limite la copie |
Remplissage restant | Aucun remplissage | Remplit les caractères restants avec \0 |
Performance | Plus rapide | Légèrement plus lente |
La fonction strncpy
est un outil puissant pour copier des chaînes de manière sécurisée. Cependant, elle nécessite une gestion attentive pour éviter des erreurs comme l’absence de terminaison par \0
. En suivant les bonnes pratiques et en ajoutant toujours un caractère nul lorsque nécessaire, vous pouvez tirer pleinement parti de cette fonction pour des programmes robustes et sûrs.
Exercice 1 : Calcul des Écarts sur Volume et Prix Contexte :Une entreprise a prévu…
1. Généralités sur le Contrôle Budgétaire Question 1 : Quel est l’objectif principal du contrôle…
Voici un QCM Contrôle de Gestion - Pilotage de la Performance bien conçu sur le…
Une fiche d’action est un outil essentiel pour planifier, suivre et gérer les tâches dans…
La fiche de parrainage est bien plus qu’un simple document administratif. Elle constitue un outil…
La tenue de registres est une méthode essentielle pour organiser et gérer des informations de…
This website uses cookies.