apostrophes

2025-09-12 13:38:34 +02:00
parent 6a3569cf2f
commit f83bddf3fa
9 changed files with 73 additions and 73 deletions

@@ -8,11 +8,11 @@
## Caractéristiques ## Caractéristiques
- Langage de programmation procédural ; - Langage de programmation procédural ;
- Langage de bas niveau : conçu pour être compilé en un nombre dinstructions machine prévisible en termes doccupation mémoire et de charges de calcul ; - Langage de bas niveau : conçu pour être compilé en un nombre d'instructions machine prévisible en termes d'occupation mémoire et de charges de calcul ;
- Langage extrêmement utilisé dans : - Langage extrêmement utilisé dans :
- La programmation embarquée sur micro-contrôleurs ; - La programmation embarquée sur micro-contrôleurs ;
- Les calculs intensifs ; - Les calculs intensifs ;
- Lécriture du noyau de systèmes dexploitation ; - L'écriture du noyau de systèmes d'exploitation ;
- Les modules où la rapidité de traitement est importante. - Les modules où la rapidité de traitement est importante.
Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java et PHP, C#, JavaScript, ... Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java et PHP, C#, JavaScript, ...
@@ -20,7 +20,7 @@ Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java
### Avantages ### Avantages
- Nombre restreint de concepts, ce qui facilite sa maîtrise ; - Nombre restreint de concepts, ce qui facilite sa maîtrise ;
- Nombre restreint de mots clés, ce qui facilite lapprentissage ; - Nombre restreint de mots clés, ce qui facilite l'apprentissage ;
- Proche de la machine : opérateurs proches du langage machines et fonctions permettant un accès direct au système ; - Proche de la machine : opérateurs proches du langage machines et fonctions permettant un accès direct au système ;
- Programmation modulaire : permet de gérer plusieurs fichiers sources ⇒ structuration, compréhensibilité et réutilisation du code ; - Programmation modulaire : permet de gérer plusieurs fichiers sources ⇒ structuration, compréhensibilité et réutilisation du code ;
- Grand nombre de bibliothèques tierces existantes. - Grand nombre de bibliothèques tierces existantes.

@@ -38,7 +38,7 @@ Déclarer une constante
### Fonctions ### Fonctions
La fonction main est le point dentrée de tout programme C. Elle retourne un code numérique pour spécifier si le traitement (quelqu'il soit) s'est bien déroulé. La fonction main est le point d'entrée de tout programme C. Elle retourne un code numérique pour spécifier si le traitement (quelqu'il soit) s'est bien déroulé.
### Variables ### Variables
@@ -67,7 +67,7 @@ Les commentaires en-ligne Doivent obligatoirement tenir sur une ligne. Ils Peuve
delta = b * b - 4 * a * c; // Δ = b² - 4ac delta = b * b - 4 * a * c; // Δ = b² - 4ac
``` ```
Les commentaires en bloc peuvent sétendre sur plusieurs lignes. Ils sont délimités par /* et */ Les commentaires en bloc peuvent s'étendre sur plusieurs lignes. Ils sont délimités par /* et */
```c ```c
/* Résolution d'une équation du 2nd degré /* Résolution d'une équation du 2nd degré

@@ -7,43 +7,43 @@ La réservation de la zone mémoire est dimensionnée par sa déclaration
Cette zone mémoire ne peut pas être redimensionnée. On dit alors que la taille du tableau est statique. Cette zone mémoire ne peut pas être redimensionnée. On dit alors que la taille du tableau est statique.
Si je déclare int tab[100], alors tab (le nom du tableau) est un pointeur contenant ladresse du premier élément du tableau. Si je déclare int tab[100], alors tab (le nom du tableau) est un pointeur contenant l'adresse du premier élément du tableau.
tab = &tab[0]; tab = &tab[0];
*tab = *(&tab[0]) = tab[0]; *tab = *(&tab[0]) = tab[0];
En langage C, le codage utilisé pour les caractères est le codage ASCII (étendu En langage C, le codage utilisé pour les caractères est le codage ASCII (étendu
pour les accents). Une table de code ASCII est disponible ici. pour les accents). Une table de code ASCII est disponible ici.
Les différents codes courants (en décimal) sont les suivants : Les différents codes courants (en décimal) sont les suivants :
I (espace) ⇒ 32 ; I ' ' (espace) ⇒ 32 ;
I 0 à 9 : ⇒ 48 à 57 ; I '0' à '9' : ⇒ 48 à 57 ;
I A à Z : ⇒ 65 à 90 ; I 'A' à 'Z' : ⇒ 65 à 90 ;
I a à z : ⇒ 97 à 122. I 'a' à 'z' : ⇒ 97 à 122.
En se basant sur la relation de précédence alphabétique des caractères, nous En se basant sur la relation de précédence alphabétique des caractères, nous
pouvons définir une précédence lexicographique pour les chaînes de caractères. pouvons définir une précédence lexicographique pour les chaînes de caractères.
Cette relation de précédence qui suit lordre du dictionnaire est définie de la Cette relation de précédence qui suit l'ordre du dictionnaire est définie de la
manière suivante : manière suivante :
- La chaîne vide "" précède lexicographiquement toutes les autres chaînes ; - La chaîne vide "" précède lexicographiquement toutes les autres chaînes ;
- La chaîne A = a1a2...ap (p caractères) précède lexicographiquement la - La chaîne A = a1a2...ap (p caractères) précède lexicographiquement la
chaîne B = b1b2...bm (m caractères) si lune des deux conditions suivantes est remplie : chaîne B = b1b2...bm (m caractères) si l'une des deux conditions suivantes est remplie :
X a1 < b1 ; X a1 < b1 ;
X a1 = b1 et a2a3...ap précède lexicographiquement b2b3...bm X a1 = b1 et a2a3...ap précède lexicographiquement b2b3...bm
• "ABC" précède "BCD" car A<B ; • "ABC" précède "BCD" car 'A'<'B' ;
• "ABC" précède "B" car A<B ; • "ABC" précède "B" car 'A'<'B' ;
• "Abc" précède "abc" car A<a ; • "Abc" précède "abc" car 'A'<'a' ;
• "ab" précède "abcd" car "" précède "cd" ; • "ab" précède "abcd" car "" précède "cd" ;
• " ab" précède "ab" car <a (le code ASCII de est 32, et le code ASCII de a est 97). • " ab" précède "ab" car ' '<'a' (le code ASCII de ' ' est 32, et le code ASCII de 'a' est 97).
Il ne faut pas oublier que lordinateur travaille avec les codes ASCII ! ! ! Il ne faut pas oublier que l'ordinateur travaille avec les codes ASCII ! ! !
Contrairement aux langage plus évolués (Java, C++, PHP, ...), il nexiste Contrairement aux langage plus évolués (Java, C++, PHP, ...), il n'existe
pas en C de type prédéfini chaîne de caractères. pas en C de type prédéfini chaîne de caractères.
Or, dans tout programme informatique qui se respecte, les chaînes de Or, dans tout programme informatique qui se respecte, les chaînes de
caractères sont très utilisées afin de stocker des informations non numériques caractères sont très utilisées afin de stocker des informations non numériques
comme par exemple une liste de noms, dadresses, de références, .... comme par exemple une liste de noms, d'adresses, de références, ....
Par conséquent, il existe quand même des notations particulières et une bonne Par conséquent, il existe quand même des notations particulières et une bonne
quantité de fonctions spéciales pour le traitement des chaînes de caractères quantité de fonctions spéciales pour le traitement des chaînes de caractères
que nous allons étudier ici. que nous allons étudier ici.
En langage C, les chaînes de caractères sont des tableaux de caractères. En langage C, les chaînes de caractères sont des tableaux de caractères.
Leur déclaration est donc analogue à celle dun tableau à une dimension : Leur déclaration est donc analogue à celle d'un tableau à une dimension :

@@ -14,11 +14,11 @@ remplacé par
double aire = 3.1415 * pow(rayon, 2); double aire = 3.1415 * pow(rayon, 2);
``` ```
**La compilation** : Cest la traduction du fichier généré par le préprocesseur en assembleur, cest-à-dire en une suite dinstruction correspondant au microprocesseur cible. (en mnémonique rendant la lecture encore possible). **La compilation** : C'est la traduction du fichier généré par le préprocesseur en assembleur, c'est-à-dire en une suite d'instruction correspondant au microprocesseur cible. (en mnémonique rendant la lecture encore possible).
**Lassemblage** : L'assembleur traduit le code assembleur en code objet binaire directement compréhensible par le processeur. (fichiers objets). **L'assemblage** : L'assembleur traduit le code assembleur en code objet binaire directement compréhensible par le processeur. (fichiers objets).
**Lédition de liens** : Le linker combine le code objet avec les bibliothèques nécessaires (comme la bibliothèque standard C) pour produire un exécutable. (fichiers exe ou out). **L'édition de liens** : Le linker combine le code objet avec les bibliothèques nécessaires (comme la bibliothèque standard C) pour produire un exécutable. (fichiers exe ou out).
```mermaid ```mermaid
graph LR; graph LR;

@@ -4,7 +4,7 @@ Le langage C a été créé au début des années 1970 par Dennis Ritchie et Ken
### Langage C original ### Langage C original
La première version du C sort en 1972. Elle était étroitement liée au développement d'UNIX. Son adoption rapide a fait de C le langage privilégié pour développer des systèmes dexploitation et des logiciels nécessitant des performances et une gestion fine de la mémoire. La première version du C sort en 1972. Elle était étroitement liée au développement d'UNIX. Son adoption rapide a fait de C le langage privilégié pour développer des systèmes d'exploitation et des logiciels nécessitant des performances et une gestion fine de la mémoire.
### K & R C ### K & R C
@@ -22,7 +22,7 @@ Le standard C89 a été adopté par l'ISO (International Organization for Standa
En 1999, une révision majeure du langage a été publiée sous le nom de C99. Cette version introduit de nombreuses améliorations, dont : En 1999, une révision majeure du langage a été publiée sous le nom de C99. Cette version introduit de nombreuses améliorations, dont :
- La prise en charge des variables déclarées à nimporte quel endroit du code, pas seulement au début d'un bloc. - La prise en charge des variables déclarées à n'importe quel endroit du code, pas seulement au début d'un bloc.
- Les tableaux dynamiques et les types entiers plus précis. - Les tableaux dynamiques et les types entiers plus précis.
- Les boucles for avec des variables locales. - Les boucles for avec des variables locales.
- De nouvelles fonctions mathématiques et des améliorations sur la précision des nombres flottants. - De nouvelles fonctions mathématiques et des améliorations sur la précision des nombres flottants.

@@ -69,7 +69,7 @@ sizeof() | Renvoie la taille d'une variable. sizeof(a), où a est un entier, ren
\* | Pointeur de la variable *a; \* | Pointeur de la variable *a;
? : | Expression conditionnelle. ? : | Expression conditionnelle.
## Priorité et ordre dévaluation ## Priorité et ordre d'évaluation
La priorité des opérateurs détermine le groupement des termes dans une expression et décide comment une expression est évaluée. Certains opérateurs ont une priorité plus élevée que d'autres ; par exemple, l'opérateur de multiplication a une priorité plus élevée que l'opérateur d'addition. La priorité des opérateurs détermine le groupement des termes dans une expression et décide comment une expression est évaluée. Certains opérateurs ont une priorité plus élevée que d'autres ; par exemple, l'opérateur de multiplication a une priorité plus élevée que l'opérateur d'addition.

@@ -54,19 +54,19 @@ l'opérateur d'indirection `*` modifie la valeur ciblée par le pointeur, et non
> La déclaration d'un pointeur n'engendre pas de réservation en mémoire. > La déclaration d'un pointeur n'engendre pas de réservation en mémoire.
Les allocations de mémoires pour les pointeurs sont réalisées dans une zone mémoire bien spécifique qui sappelle le tas (heap) (cours INFO2). Les allocations de mémoires pour les pointeurs sont réalisées dans une zone mémoire bien spécifique qui s'appelle le tas (heap) (cours INFO2).
- Lallocation correspond à la réservation dun bloc mémoire spécifique à votre programme par le gestionnaire de mémoire du système dexploitation. - L'allocation correspond à la réservation d'un bloc mémoire spécifique à votre programme par le gestionnaire de mémoire du système d'exploitation.
- Cette opération est qualifiée dallocation dynamique car la taille du bloc est modifiable à tout instant dans votre programme. - Cette opération est qualifiée d'allocation dynamique car la taille du bloc est modifiable à tout instant dans votre programme.
- La gestion de lallocation mémoire se fait grˆace aux 3 fonctions suivantes : - La gestion de l'allocation mémoire se fait grˆace aux 3 fonctions suivantes :
- malloc et calloc : demande de mémoire du programme au système dexploitation ; - malloc et calloc : demande de mémoire du programme au système d'exploitation ;
- realloc : changement de la taille du bloc mémoire alloué (en + ou en -) ; - realloc : changement de la taille du bloc mémoire alloué (en + ou en -) ;
- free : libération du bloc mémoire lorsquil nest plus utilisé. - free : libération du bloc mémoire lorsqu'il n'est plus utilisé.
Afin de pouvoir gérer la mémoire dynamiquement en utilisant ces fonctions, il faut inclure stdlib.h. Afin de pouvoir gérer la mémoire dynamiquement en utilisant ces fonctions, il faut inclure stdlib.h.
La déclaration dun pointeur nengendre pas de réservation mémoire. Si on ne réserve pas demplacement mémoire, il y a risque de débordement dun pointeur dans les données voisines, donc de plantage du programme. La déclaration d'un pointeur n'engendre pas de réservation mémoire. Si on ne réserve pas d'emplacement mémoire, il y a risque de débordement d'un pointeur dans les données voisines, donc de plantage du programme.
### malloc ### malloc
@@ -75,13 +75,13 @@ La déclaration dun pointeur nengendre pas de réservation mémoire. Si on
void *malloc(size t taille); void *malloc(size t taille);
``` ```
Elle permet dallouer un bloc de mémoire de taille octets dans la zone de mémoire appelée tas (heap), réservée aux données ; Elle permet d'allouer un bloc de mémoire de taille octets dans la zone de mémoire appelée tas (heap), réservée aux données ;
Le bloc de données nest pas initialisé lors de lallocation ; Le bloc de données n'est pas initialisé lors de l'allocation ;
Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ; Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ;
Si lallocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si taille vaut 0, elle renvoie un pointeur nul : NULL. Si l'allocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si taille vaut 0, elle renvoie un pointeur nul : NULL.
```c ```c
int *p; int *p;
@@ -102,13 +102,13 @@ if ( p== NULL) // test création du pointeur
void *calloc(size t nombre, size t tailleType); void *calloc(size t nombre, size t tailleType);
``` ```
Elle permet dallouer un bloc de mémoire de nombre tailleType octets dans la zone de mémoire appelée tas (heap), réservée aux données ; Elle permet d'allouer un bloc de mémoire de nombre tailleType octets dans la zone de mémoire appelée tas (heap), réservée aux données ;
Le bloc de données est initialisé avec des 0 lors de lallocation ; Le bloc de données est initialisé avec des 0 lors de l'allocation ;
Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ; Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ;
Si lallocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si taille vaut 0, elle renvoie un pointeur nul : NULL. Si l'allocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si taille vaut 0, elle renvoie un pointeur nul : NULL.
```c ```c
int *p; int *p;
@@ -127,15 +127,15 @@ if ( p== NULL) // test création du pointeur
void *realloc(void *pointeurBase, size t newTaille); void *realloc(void *pointeurBase, size t newTaille);
``` ```
Elle permet de changer la taille dun bloc de mémoire déjà alloué. Elle est le reflet de laspect dynamique des pointeurs ; Elle permet de changer la taille d'un bloc de mémoire déjà alloué. Elle est le reflet de l'aspect dynamique des pointeurs ;
Le paramètre newTaille correspond à laddition de la taille de lancien bloc et de la taille du bloc supplémentaire à ajouter ; Le paramètre newTaille correspond à l'addition de la taille de l'ancien bloc et de la taille du bloc supplémentaire à ajouter ;
Le contenu du bloc précédant est gardé ⇒ pas besoin de gérer le copie ; Le contenu du bloc précédant est gardé ⇒ pas besoin de gérer le copie ;
Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ; Elle renvoie un pointeur de type void (permettant de gérer les adresses de données de tous types). Il convient donc de le convertir en un type de données déterminé (cast) ;
Si lallocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si newTaille vaut 0, elle renvoie un pointeur nul : NULL. Si l'allocation réussit, la fonction renvoie un pointeur sur le bloc nouvellement alloué. Si la place disponible est insuffisante ou si newTaille vaut 0, elle renvoie un pointeur nul : NULL.
```c ```c
int *p; int *p;
@@ -160,9 +160,9 @@ La fonction free
void *free(void *pointeur); void *free(void *pointeur);
``` ```
Cette fonction permet de libérer lespace mémoire alloué par les 3 fonctions précédentes. Cette fonction permet de libérer l'espace mémoire alloué par les 3 fonctions précédentes.
Il est important de libérer lespace après utilisation, sinon celui-ci devient inutilisable pour la suite du programme ! ! Il est important de libérer l'espace après utilisation, sinon celui-ci devient inutilisable pour la suite du programme ! !
```c ```c

@@ -51,7 +51,7 @@ En résumé, bien que les chaînes de caractères en C soient simples, elles né
## Saisie de chaine de caractères ## Saisie de chaine de caractères
La fonction ***scanf*** est prévue pour faire de la saisie de valeurs formatée. Cest à dire que lon précise dans quel format doivent être saisies les variables. La fonction ***scanf*** est prévue pour faire de la saisie de valeurs formatée. C'est à dire que l'on précise dans quel format doivent être saisies les variables.
```c ```c
# include < stdio .h > # include < stdio .h >
@@ -67,7 +67,7 @@ int main (int argc , char *argv[])
} }
``` ```
Pour que la fonction scanf puisse soccuper de la saisie des chaînes de caractères, il faut utiliser le format %s. Pour que la fonction scanf puisse s'occuper de la saisie des chaînes de caractères, il faut utiliser le format %s.
Une chaîne de caractères étant définie comme un pointeur, on ne met pas le & devant la variable à saisir. Une chaîne de caractères étant définie comme un pointeur, on ne met pas le & devant la variable à saisir.
@@ -81,34 +81,34 @@ int main (int argc , char *argv[])
} }
``` ```
A la fin de la saisie, le caractère \0 est ajouté automatiquement. A la fin de la saisie, le caractère '\0' est ajouté automatiquement.
> ATTENTION : scanf ne permet pas la saisie d'une chaîne comportant des espaces. > ATTENTION : scanf ne permet pas la saisie d'une chaîne comportant des espaces.
⇒ Les caractères saisis à partir de lespace ne sont pas pris en compte mais restent rangés dans le tampon ⇒ Les caractères saisis à partir de l'espace ne sont pas pris en compte mais restent rangés dans le tampon
dentrée. d'entrée.
{class=warning} {class=warning}
### Le tampon dentrée ? ### Le tampon d'entrée ?
Lorsque vous tapez au clavier, chaque caractère est écrit dans un tampon (buffer en anglais). Cest dans ce tampon que scanf ira lire ; Lorsque vous tapez au clavier, chaque caractère est écrit dans un tampon (buffer en anglais). C'est dans ce tampon que scanf ira lire ;
Tout ce qui nest pas lu sera lu au prochain appel dune fonction de lecture. Ainsi, si le tampon est plein, le scanf prend le contenu comme ci cela venait dune saisie opérateur ; Tout ce qui n'est pas lu sera lu au prochain appel d'une fonction de lecture. Ainsi, si le tampon est plein, le scanf prend le contenu comme ci cela venait d'une saisie opérateur ;
Le buffer dentrée en langage C se nomme stdin. Le buffer d'entrée en langage C se nomme stdin.
Le tampon est géré par le système dexploitation Le tampon est géré par le système d'exploitation
La mémoire est géré par le programme. Elle ne La mémoire est géré par le programme. Elle ne
contient que ce qui est lu par le scanf scanf va lire le tampon et placer ce quelle a lu en mémoire. contient que ce qui est lu par le scanf scanf va lire le tampon et placer ce qu'elle a lu en mémoire.
#### Utilisation particulière #### Utilisation particulière
On utilise un format particulier de la fonction scanf On utilise un format particulier de la fonction scanf
On peut faire suivre le symbole % dune liste de caractères entre crochets à la place du s. Celle-ci peut être une liste de caractères interdits. On peut faire suivre le symbole % d'une liste de caractères entre crochets à la place du s. Celle-ci peut être une liste de caractères interdits.
Ainsi, scanf lit alors jusquà ce quelle tombe sur un caractère interdit. Ce caractère est principalement le retour chariot. Ainsi, scanf lit alors jusqu'à ce qu'elle tombe sur un caractère interdit. Ce caractère est principalement le retour chariot.
```c ```c
# include < stdio .h > # include < stdio .h >
@@ -116,7 +116,7 @@ Ainsi, scanf lit alors jusquà ce quelle tombe sur un caractère interdit.
int main (int argc , char *argv[]) int main (int argc , char *argv[])
{ {
char nom[20]; char nom[20];
scanf (" %[ˆ\n]", nom) ; // lecture des caractères ( espace compris ) jusqu au retour chariot scanf (" %[ˆ\n]", nom) ; // lecture des caractères ( espace compris ) jusqu 'au retour chariot
} }
``` ```
@@ -131,15 +131,15 @@ char voyelles [];
scanf ("%[[ aeiouy ]ˆ\n]",voyelles ) ; // pour saisir uniquement des voyelles scanf ("%[[ aeiouy ]ˆ\n]",voyelles ) ; // pour saisir uniquement des voyelles
char nom []; char nom [];
scanf ("%[[a-z]ˆ\n]",voyelles ) ; // les lettres de lalphabet en minuscule scanf ("%[[a-z]ˆ\n]",voyelles ) ; // les lettres de l'alphabet en minuscule
char nom []; char nom [];
scanf ("%[[A-Z]ˆ\n]",voyelles ) ; // les lettres de lalphabet en majuscule scanf ("%[[A-Z]ˆ\n]",voyelles ) ; // les lettres de l'alphabet en majuscule
int main (int argc , char *argv[]) int main (int argc , char *argv[])
``` ```
Dans ce cas, la saisie sarrête avec le retour chariot mais la phrase mise en mémoire par le scanf sera stoppée au premier caractère en dehors de la plage. Dans ce cas, la saisie s'arrête avec le retour chariot mais la phrase mise en mémoire par le scanf sera stoppée au premier caractère en dehors de la plage.
@@ -152,11 +152,11 @@ string.h : fonctions pour calculer la longueur des chaînes, gérer la concatén
stdlib.h : fonctions pour gérer la conversion de type numérique en chaîne de caractères et vice-versa. stdlib.h : fonctions pour gérer la conversion de type numérique en chaîne de caractères et vice-versa.
#### Longueur dune chaîne de caractères #### Longueur d'une chaîne de caractères
size t strlen(const char *str); size t strlen(const char *str);
Cette fonction va nous permettre de récupérer la taille de nimporte quelle chaîne de caractères sans compter le \0 final. Cette fonction va nous permettre de récupérer la taille de n'importe quelle chaîne de caractères sans compter le '\0' final.
La fonction retourne un size t (entier long non signé) et prend en paramètre une chaîne de caractères. La fonction retourne un size t (entier long non signé) et prend en paramètre une chaîne de caractères.
```c ```c
@@ -170,8 +170,8 @@ printf (" Taille de la chaîne = %d\n", longueur ) ;
char *strcpy(char *dest, const char *src); char *strcpy(char *dest, const char *src);
Cette fonction copie une chaîne dans une autre chaîne et renvoie un pointeur sur cette dernière. Elle copie tous les caractères, y compris le \0. Cette fonction copie une chaîne dans une autre chaîne et renvoie un pointeur sur cette dernière. Elle copie tous les caractères, y compris le '\0'.
Le problème est quelle ne fait aucune vérification sur les longueurs des chaînes source et destination. Le problème est qu'elle ne fait aucune vérification sur les longueurs des chaînes source et destination.
```c ```c
char chaineSrc [20] , chaineDest [20]; char chaineSrc [20] , chaineDest [20];
@@ -208,9 +208,9 @@ else
char *strcat(char *dest, const char *src); char *strcat(char *dest, const char *src);
Cette fonction sert à concaténer deux chaînes, cest à dire simplement coller deux chaînes lune à la suite de lautre. Elle renvoie un pointeur sur la nouvelle chaîne ainsi construite. Cette fonction sert à concaténer deux chaînes, c'est à dire simplement coller deux chaînes l'une à la suite de l'autre. Elle renvoie un pointeur sur la nouvelle chaîne ainsi construite.
Pour éviter les problèmes, il faut sassurer que la chaîne destination soit suffisamment grande (taille de dest + taille de src). Pour éviter les problèmes, il faut s'assurer que la chaîne destination soit suffisamment grande (taille de dest + taille de src).
```c ```c
char dest [50] = "bon "; char dest [50] = "bon ";
@@ -223,7 +223,7 @@ printf (" Apres : %s\n", dest ) ;
#### Recherche dans les chaînes de caractères #### Recherche dans les chaînes de caractères
Ces fonctions renvoient ladresse de linformation recherchée en cas de succès, sinon le pointeur NULL. Ces fonctions renvoient l'adresse de l'information recherchée en cas de succès, sinon le pointeur NULL.
- char *strchr(const char *s, int c); : elle permet de rechercher un caractère dans une chaîne. Elle renvoie un pointeur sur ce caractère. Si le caractère est présent plusieurs fois, elle renvoie un pointeur sur la première occurrence ; - char *strchr(const char *s, int c); : elle permet de rechercher un caractère dans une chaîne. Elle renvoie un pointeur sur ce caractère. Si le caractère est présent plusieurs fois, elle renvoie un pointeur sur la première occurrence ;
- char *strrchr(const char *s, int c); : la même que précédemment mais retourne un pointeur sur la dernière occurrence ; - char *strrchr(const char *s, int c); : la même que précédemment mais retourne un pointeur sur la dernière occurrence ;
@@ -231,9 +231,9 @@ Ces fonctions renvoient ladresse de linformation recherchée en cas de suc
#### Conversion de chaîne de caractères en valeur numérique #### Conversion de chaîne de caractères en valeur numérique
- int atoi(const char *s); : conversion dune chaîne de caractères en entier ; - int atoi(const char *s); : conversion d'une chaîne de caractères en entier ;
- long atol(const char *s); : conversion dune chaîne de caractères en entier long ; - long atol(const char *s); : conversion d'une chaîne de caractères en entier long ;
- double atof(const char *s); : conversion dune chaîne de caractère en double. - double atof(const char *s); : conversion d'une chaîne de caractère en double.
```c ```c
#include <stdlib.h> #include <stdlib.h>
@@ -254,7 +254,7 @@ int main (int argc , char *argv[])
int sprintf(char *str, const char *format, ...); int sprintf(char *str, const char *format, ...);
Cette fonction crée une chaîne de caractères qui sera stockée dans la variable str. La constitution de cette chaîne reprend le fonctionnement de printf, cest à dire une chaîne formatée avec insertion des valeurs numériques. Cette fonction crée une chaîne de caractères qui sera stockée dans la variable str. La constitution de cette chaîne reprend le fonctionnement de printf, c'est à dire une chaîne formatée avec insertion des valeurs numériques.
```c ```c
int main (int argc , char *argv[]) int main (int argc , char *argv[])

@@ -54,7 +54,7 @@ int main()
Ce code provoque une erreur : la variable est non déclarée avant sont utilisation ! Ce code provoque une erreur : la variable est non déclarée avant sont utilisation !
``` ```
error: age undeclared (first use in this function) error: age' undeclared (first use in this function)
``` ```
Voici le code correct Voici le code correct