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 de caractère ou l'adresse du premier caractère d'un tableau de caractères (chaîne). Les pointeurs de caractères sont très utiles lorsque vous travaillez pour manipuler les chaînes.
Il n'y a pas de type de données chaîne en C. Un tableau de type "char" est considéré comme une chaîne. Par conséquent, un pointeur d’un tableau de type char représente une chaîne. Ce pointeur char peut ensuite être passé en argument à une fonction pour traiter la chaîne.
Déclarer un pointeur de caractère
Un pointeur de caractère pointe vers un caractère ou un tableau de caractères. Ainsi, pour déclarer un pointeur de caractère, utilisez la syntaxe suivante :
char *pointer_name;
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 de caractère. S'il existe un tableau de caractères, vous pouvez simplement initialiser le pointeur de caractère en fournissant le nom du tableau de caractères ou l'adresse des premiers éléments de celui-ci.
Pointeur de personnage
Voici la syntaxe pour initialiser un pointeur de caractère d'un type de caractère :
char *pointer_name = &char_variable;
Pointeur de caractère du tableau de caractères
Voici la syntaxe pour initialiser un pointeur de caractère d'un tableau de caractères (chaîne) :
char *pointer_name = char_array; /*or*/ char *pointer_name = &char_array[0];
Exemple de pointeur de caractère
Dans l'exemple suivant, nous avons deux variables caractère et tableau de caractères. Nous prenons deux variables de pointeur pour stocker les adresses du caractère et du tableau de caractères, puis imprimons les valeurs des variables à l'aide des pointeurs de caractères.
#include <stdio.h>
int main() {
// Declare two variables
char x = 'P';
char arr[] = "TutorialsPoint";
// Declaring character pointers
char *ptr_x = &x;
char *ptr_arr = arr;
// Printing values
printf("Value of x : %c\n", *ptr_x);
printf("Value of arr: %s\n", ptr_arr);
return 0;
}
Sortie
Exécutez le code et vérifiez sa sortie −
Value of x : P Value of arr: TutorialsPoint
Comprendre le pointeur de caractère
Une chaîne est déclarée sous forme de 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 attribuez-lui l'adresse du caractère à la 0ème position −
char *ptr = &arr[0];
N'oubliez pas que le nom du tableau lui-même est l'adresse du 0ème élément.
char *ptr = arr;
Une chaîne peut être déclarée en utilisant un pointeur au lieu d'une variable tableau (pas de crochets).
char *ptr = "Hello";
Cela provoque le stockage de la chaîne dans la mémoire et son adresse dans ptr. Nous pouvons parcourir la chaîne en incrémentant le ptr.
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
Accès au tableau de caractères
Si vous imprimez un tableau de caractères en utilisant le spécificateur de format %s, vous pouvez le faire en utilisant le nom du pointeur de caractère. Mais si vous souhaitez accéder à chaque caractère du tableau de caractères, vous devez utiliser un astérisque (*) avant le nom du pointeur de caractère puis l'incrémenter.
Exemple
Voici le code complet du programme −
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
while(*ptr != '\0'){
printf("%c", *ptr);
ptr++;
}
}
Sortie
Exécutez le code et vérifiez sa sortie −
Character Pointers and Functions in C
Exemple
Vous pouvez également transmettre ptr à printf() au format %s pour imprimer la chaîne.
#include <stdio.h>
int main(){
char arr[] = "Character Pointers and Functions in C";
char *ptr = arr;
printf("%s", ptr);
}
Sortie
En exécutant ce code, vous obtiendrez le même résultat −
Character Pointers and Functions in C
Fonctions du pointeur de caractère
Les fichiers d'en-tête "string.h" définissent un certain nombre de fonctions de bibliothèque qui effectuent le traitement des chaînes, telles que la recherche de la longueur d'une chaîne, la copie d'une chaîne et la comparaison de deux chaînes. Ces fonctions utilisent des arguments de pointeur char.
La fonction strlen()
La fonction strlen() renvoie la longueur, c'est-à-dire le nombre de caractères dans une chaîne. Le prototype de la fonction strlen() est le suivant −
int strlen(char *)
Exemple 1
Le code suivant montre comment vous pouvez imprimer la longueur d'une chaîne −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "Hello";
printf("Given string: %s \n", ptr);
printf("Length of the string: %d", strlen(ptr));
return 0;
}
Lorsque vous exécutez ce code, il produira le résultat suivant -
Given string: Hello Length of the string: 5
Exemple 2
En effet, la fonction strlen() calcule la longueur de la chaîne selon la fonction définie par l'utilisateur str_len() comme indiqué ci-dessous -
#include <stdio.h>
#include <string.h>
int str_len(char *);
int main(){
char *ptr = "Welcome to Tutorialspoint";
int length = str_len(ptr);
printf("Given string: %s \n", ptr);
printf("Length of the string: %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 produira le résultat suivant -
Given string: Welcome to Tutorialspoint Length of the string: 25
La fonction strcpy()
L'opérateur d'affectation ( =) n'est pas utilisé pour attribuer une valeur de chaîne à une variable de chaîne, c'est-à-dire un pointeur de caractère. 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 vous pouvez utiliser la fonction strcpy() −
#include <stdio.h>
#include <string.h>
int main(){
char *ptr = "How are you doing?";
char *ptr1;
strcpy(ptr1, ptr);
printf("%s", ptr1);
return 0;
}
La fonction strcpy() renvoie le pointeur vers la chaîne de destination ptr1.
How are you doing?
Exemple 2
En interne, la fonction strcpy() implémente la logique suivante dans la fonction str_cpy() définie par l'utilisateur −
#include <stdio.h>
#include <string.h>
void str_cpy(char *d, char *s);
int main(){
char *ptr = "Using the strcpy() Function";
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 son code, il produira le résultat suivant -
Using the strcpy() Function
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, il 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 à être utilisé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 s'avèrent identiques, le système renvoie "0".
- Lorsque le premier caractère ne correspondant pas dans str1 a une valeur ASCII supérieure au caractère correspondant dans str2, la fonction renvoie un entier positif. Cela implique que str1 apparaît après str2 par ordre alphabétique, comme dans un dictionnaire.
- Lorsque le premier caractère ne correspondant pas dans str1 a une valeur ASCII inférieure à celle du caractère correspondant dans str2, la fonction renvoie un entier négatif. Cela implique que str1 apparaît avant str2 par ordre alphabétique, comme dans un dictionnaire.
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("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string \n");
else
printf("The first string appears before the second string \n");
return 0;
}
Exécutez le code et vérifiez sa sortie −
The first string appears after the second string
Remplacez s1 par BACK et exécutez à nouveau le code. Maintenant, vous obtiendrez le résultat suivant -
The first string appears before the second string
Exemple 2
Vous pouvez obtenir un résultat similaire en utilisant la fonction définie par l'utilisateur str_cmp(), comme indiqué dans le code suivant −
#include <stdio.h>
#include <string.h>
int str_cmp(char *str1, char *str2);
int main(){
char *s1 = "The Best C Programming Tutorial Available Online";
char *s2 = "The Best C Programming Tutorial Available Online";
int ret = str_cmp(s1, s2);
if (ret == 0)
printf("Both strings are identical\n");
else if (ret > 0)
printf("The first string appears after the second string\n");
else
printf("The first string appears before the second string\n");
return 0;
}
int str_cmp(char *str1, char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2;
}
str1++;
str2++;
}
// If both strings are equal, return 0
return 0;
}
Lorsque vous exécutez ce code, il produira le résultat suivant -
Both strings are identical
La fonction str_cmp() compare les caractères au même index dans une chaîne jusqu'à ce que les caractères de 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 entre leurs valeurs ASCII est renvoyée. Il renvoie "0" lorsque la boucle est terminée.
Langue C
- C# - Collections
- C# - Gestion des exceptions
- Tutoriel de classe abstraite C # avec exemple :Qu'est-ce que l'abstraction ?
- Différence entre C et C++
- C-Fonctions
- Commutateur C Déclaration
- C - Récursivité
- Instruction C++ switch..case
- Tableaux en C++ | Déclarer | Initialiser | Pointeur vers des exemples de tableaux