Maîtriser les pointeurs de caractères et l'utilisation des fonctions en C
Qu'est-ce qu'un pointeur de caractère en C ?
Un pointeur de caractère stocke l'adresse d'un type caractère ou l'adresse du premier caractère d'un tableau de caractères (chaîne de caractères). Les pointeurs de caractères sont très utiles pour manipuler des chaînes.
Il n'existe pas de type de données « string » en C. Un tableau de type « char » est considéré comme une chaîne. Ainsi, un pointeur vers un tableau de char représente une chaîne. Ce pointeur char peut ensuite être passé en argument à une fonction pour traiter la chaîne.
Déclaration d'un pointeur de caractère
Un pointeur de caractère pointe vers un caractère ou un tableau de caractères. Pour déclarer un pointeur de caractère, utilisez la syntaxe suivante :
char *nom_pointeur;
Initialisation d'un pointeur de caractère
Après avoir déclaré un pointeur de caractère, vous devez l'initialiser avec l'adresse d'une variable caractère. S'il s'agit d'un tableau de caractères, vous pouvez simplement initialiser le pointeur en fournissant le nom du tableau ou l'adresse de son premier élément.
Pointeur de caractère vers un caractère
Voici la syntaxe pour initialiser un pointeur de caractère vers une variable de type caractère :
char *nom_pointeur = &variable_char;
Pointeur de caractère vers un tableau de caractères
Voici la syntaxe pour initialiser un pointeur de caractère vers un tableau de caractères (chaîne) :
char *nom_pointeur = tableau_char; /*ou*/ char *nom_pointeur = &tableau_char[0];
Exemple de pointeur de caractère
Dans l'exemple suivant, nous avons une variable caractère et un tableau de caractères. Nous déclarons deux pointeurs pour stocker leurs adresses, puis affichons les valeurs à l'aide de ces pointeurs.
#include <stdio.h>
int main() {
// Déclaration de deux variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Déclaration des pointeurs de caractères
char *ptr_x = &x;
char *ptr_arr = arr;
// Affichage des valeurs
printf("Valeur de x : %c\n", *ptr_x);
printf("Valeur de arr : %s\n", ptr_arr);
return 0;
}
Sortie
Exécutez le code et vérifiez sa sortie :
Valeur de x : P Valeur de arr : TutorialsPoint
Comprendre les pointeurs de caractères
Une chaîne est déclarée comme un tableau comme suit :
char arr[] = "Hello";
La chaîne est un tableau de caractères terminé par NULL. Le dernier élément du tableau ci-dessus est un caractère NULL (\0).
Déclarez un pointeur de type char et assignez-lui l'adresse du caractère à la position 0 :
char *ptr = &arr[0];
Rappelez-vous que le nom du tableau est lui-même l'adresse de l'élément 0.
char *ptr = arr;
Une chaîne peut être déclarée en utilisant un pointeur au lieu d'une variable tableau (sans crochets).
char *ptr = "Hello";
Cela stocke la chaîne en mémoire et son adresse dans ptr. On peut parcourir la chaîne en incrémentant ptr.
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Accès à un tableau de caractères
Si vous imprimez un tableau de caractères avec le spécificateur de format %s, vous pouvez le faire en utilisant le nom du pointeur de caractère. Mais si vous voulez accéder à chaque caractère du tableau, vous devez utiliser un astérisque (*) avant le nom du pointeur, puis l'incrémenter.
Exemple
Voici le code complet du programme :
#include <stdio.h>
int main(){
char arr[] = "Pointeurs de caractères et fonctions en C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Sortie
Exécutez le code et vérifiez sa sortie :
Pointeurs de caractères et fonctions en C
Exemple alternatif
Alternativement, passez ptr à printf() avec le format %s pour imprimer la chaîne.
#include <stdio.h>
int main(){
char arr[] = "Pointeurs de caractères et fonctions en C";
char *ptr = arr;
printf("%s", ptr);
}
Sortie
En exécutant ce code, vous obtiendrez la même sortie :
Pointeurs de caractères et fonctions en C
Fonctions de pointeurs de caractères
Le fichier d'en-tête "string.h" définit plusieurs fonctions de bibliothèque qui effectuent le traitement des chaînes, comme trouver la longueur d'une chaîne, copier une chaîne et comparer deux chaînes. Ces fonctions utilisent des arguments de pointeur char.
La fonction strlen()
La fonction strlen() retourne la longueur, c'est-à-dire le nombre de caractères dans une chaîne. Le prototype de strlen() est le suivant :
int strlen(char *)
Exemple 1
Le code suivant montre comment afficher la longueur d'une chaîne :
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Chaîne donnée : %s \n", ptr);
printf("Longueur de la chaîne : %d", strlen(ptr));
return 0;
}
Lorsque vous exécutez ce code, il produit la sortie suivante :
Chaîne donnée : Hello Longueur de la chaîne : 5
Exemple 2
Effectivement, la fonction strlen() calcule la longueur de la chaîne comme la fonction définie par l'utilisateur str_len() ci-dessous :
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Bienvenue sur Tutorialspoint";
int length = str_len(ptr);
printf("Chaîne donnée : %s \n", ptr);
printf("Longueur de la chaîne : %d", length);
return 0;
}
int str_len(char *ptr){
int i = 0;
while(*ptr != '\0'){
i++;
ptr++;
}
return i;
}
Lorsque vous exécutez ce code, il produit la sortie suivante :
Chaîne donnée : Bienvenue sur Tutorialspoint Longueur de la chaîne : 25
La fonction strcpy()
L'opérateur d'affectation ( = ) n'est pas utilisé pour assigner une valeur de chaîne à une variable chaîne, c'est-à-dire un pointeur char. Au lieu de cela, nous devons utiliser la fonction strcpy() avec le prototype suivant :
char * strcpy(char * dest, char * source);
Exemple 1
L'exemple suivant montre comment utiliser la fonction strcpy() :
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Comment allez-vous ?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
La fonction strcpy() retourne le pointeur vers la chaîne de destination ptr1.
Comment allez-vous ?
Exemple 2
En interne, la fonction strcpy() implémente la logique suivante dans la fonction définie par l'utilisateur str_cpy() :
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Utilisation de la fonction strcpy()";
char *ptr1;
str_cpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
void str_cpy(char *d, char *s){
int i;
for(i = 0; s[i] != '\0'; i++)
d[i] = s[i];
d[i] = '\0';
}
Lorsque vous exécutez ce code, il produit la sortie suivante :
Utilisation de la fonction strcpy()
La fonction copie chaque caractère de la chaîne source vers la destination jusqu'à ce que le caractère NULL "\0" soit atteint. Après la boucle, elle ajoute un caractère "\0" à la fin du tableau de destination.
La fonction strcmp()
Les opérateurs de comparaison habituels (<, >, <=, >=, == et !=) ne sont pas autorisés pour comparer deux chaînes. Au lieu de cela, nous devons utiliser la fonction strcmp() du fichier d'en-tête "string.h". Le prototype de cette fonction est le suivant :
int strcmp(char *str1, char *str2)
La fonction strcmp() a trois valeurs de retour possibles :
- Lorsque les deux chaînes sont identiques, elle retourne "0".
- Lorsque le premier caractère non correspondant dans str1 a une valeur ASCII supérieure au caractère correspondant dans str2, la fonction retourne un entier positif. Cela implique que str1 apparaît après str2 dans l'ordre alphabétique, comme dans un dictionnaire.
- Lorsque le premier caractère non correspondant dans str1 a une valeur ASCII inférieure au caractère correspondant dans str2, la fonction retourne un entier négatif. Cela implique que str1 apparaît avant str2 dans l'ordre alphabétique.
Exemple 1
L'exemple suivant montre comment utiliser la fonction strcmp() dans un programme C :
#include <stdio.h>
#include <string.h>
int main(){
char *s1 = "BASK";
char *s2 = "BALL";
int ret = strcmp(s1, s2);
if (ret == 0)
printf("Les deux chaînes sont identiques\n");
else if (ret > 0)
printf("La première chaîne apparaît après la seconde chaîne \n");
else
printf("La première chaîne apparaît avant la seconde chaîne \n");
return 0;
}
Exécutez le code et vérifiez sa sortie :
La première chaîne apparaît après la seconde chaîne
Changez s1 en BACK et exécutez à nouveau le code. Vous obtiendrez maintenant la sortie suivante :
La première chaîne apparaît avant la seconde chaîne
Exemple 2
Vous pouvez obtenir un résultat similaire en utilisant la fonction définie par l'utilisateur str_cmp(), comme le montre le code suivant :
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "Le meilleur tutoriel de programmation C disponible en ligne";
char *s2 = "Le meilleur tutoriel de programmation C disponible en ligne";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Les deux chaînes sont identiques\n");
else if (ret > 0)
printf("La première chaîne apparaît après la seconde chaîne\n");
else
printf("La première chaîne apparaît avant la seconde chaîne\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// Si les deux chaînes sont égales, retourne 0
return 0;
}
Lorsque vous exécutez ce code, il produit la sortie suivante :
Les deux chaînes sont identiques
La fonction str_cmp() compare les caractères au même index dans une chaîne jusqu'à ce que les caractères dans l'une ou l'autre chaîne soient épuisés ou que les caractères soient égaux.
Au moment de la détection de caractères inégaux au même index, la différence de leurs valeurs ASCII est retournée. Elle retourne "0" lorsque la boucle se termine.
Langue C
- Maîtriser std::vector en C++ : Tableaux dynamiques, itérateurs et exemples pratiques
- Comprendre la priorité et l'associativité des opérateurs en C : guide clair
- Maîtriser les Collections C# : Tutoriel Pratique avec Exemples Réels
- calloc() en C : Allocation mémoire initialisée à zéro et exemple pratique
- Maîtriser les arguments variables en C : Guide pratique
- Maîtriser les opérateurs d'incrémentation et décrémentation en C : Usage & meilleures pratiques
- Maîtriser la boucle for en C : Syntaxe, mécanique et exemples pratiques
- Maîtriser les opérateurs en programmation C : Guide complet
- Maîtriser les instructions conditionnelles en C : IF, IF-ELSE et IF-ELSE imbriqués expliqués