apostrophes
6
Home.md
6
Home.md
@@ -8,11 +8,11 @@
|
||||
## Caractéristiques
|
||||
|
||||
- Langage de programmation procédural ;
|
||||
- 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 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 :
|
||||
- La programmation embarquée sur micro-contrôleurs ;
|
||||
- Les calculs intensifs ;
|
||||
- L’écriture du noyau de systèmes d’exploitation ;
|
||||
- L'écriture du noyau de systèmes d'exploitation ;
|
||||
- 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, ...
|
||||
@@ -20,7 +20,7 @@ Sa syntaxe de base a inspiré de nombreux langages plus récents dont C++, Java
|
||||
### Avantages
|
||||
|
||||
- Nombre restreint de concepts, ce qui facilite sa maîtrise ;
|
||||
- Nombre restreint de mots clés, ce qui facilite l’apprentissage ;
|
||||
- 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 ;
|
||||
- Programmation modulaire : permet de gérer plusieurs fichiers sources ⇒ structuration, compréhensibilité et réutilisation du code ;
|
||||
- Grand nombre de bibliothèques tierces existantes.
|
||||
|
||||
@@ -38,7 +38,7 @@ Déclarer une constante
|
||||
|
||||
### Fonctions
|
||||
|
||||
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é.
|
||||
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
|
||||
|
||||
@@ -67,7 +67,7 @@ Les commentaires en-ligne Doivent obligatoirement tenir sur une ligne. Ils Peuve
|
||||
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
|
||||
/* 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.
|
||||
|
||||
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.
|
||||
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[0];
|
||||
|
||||
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.
|
||||
Les différents codes courants (en décimal) sont les suivants :
|
||||
I ’ ’ (espace) ⇒ 32 ;
|
||||
I ’0’ à ’9’ : ⇒ 48 à 57 ;
|
||||
I ’A’ à ’Z’ : ⇒ 65 à 90 ;
|
||||
I ’a’ à ’z’ : ⇒ 97 à 122.
|
||||
I ' ' (espace) ⇒ 32 ;
|
||||
I '0' à '9' : ⇒ 48 à 57 ;
|
||||
I 'A' à 'Z' : ⇒ 65 à 90 ;
|
||||
I 'a' à 'z' : ⇒ 97 à 122.
|
||||
|
||||
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.
|
||||
Cette relation de précédence qui suit l’ordre 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 :
|
||||
- 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
|
||||
chaîne B = b1b2...bm (m caractères) si l’une 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 et a2a3...ap précède lexicographiquement b2b3...bm
|
||||
|
||||
• "ABC" précède "BCD" car ’A’<’B’ ;
|
||||
• "ABC" précède "B" car ’A’<’B’ ;
|
||||
• "Abc" précède "abc" car ’A’<’a’ ;
|
||||
• "ABC" précède "BCD" car 'A'<'B' ;
|
||||
• "ABC" précède "B" car 'A'<'B' ;
|
||||
• "Abc" précède "abc" car 'A'<'a' ;
|
||||
• "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).
|
||||
Il ne faut pas oublier que l’ordinateur travaille avec les codes ASCII ! ! !
|
||||
• " 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 l'ordinateur travaille avec les codes ASCII ! ! !
|
||||
|
||||
Contrairement aux langage plus évolués (Java, C++, PHP, ...), il n’existe
|
||||
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.
|
||||
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
|
||||
comme par exemple une liste de noms, d’adresses, 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
|
||||
quantité de fonctions spéciales pour le traitement des chaînes de caractères
|
||||
que nous allons étudier ici.
|
||||
|
||||
En langage C, les chaînes de caractères sont des tableaux de caractères.
|
||||
Leur déclaration est donc analogue à celle d’un 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);
|
||||
```
|
||||
|
||||
**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).
|
||||
**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).
|
||||
|
||||
**L’assemblage** : 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
|
||||
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
|
||||
|
||||
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.
|
||||
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
|
||||
|
||||
@@ -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 :
|
||||
|
||||
- La prise en charge des variables déclarées à n’importe 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 boucles for avec des variables locales.
|
||||
- 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;
|
||||
? : | 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.
|
||||
|
||||
|
||||
36
pointeurs.md
36
pointeurs.md
@@ -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.
|
||||
|
||||
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).
|
||||
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).
|
||||
|
||||
- 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 d’allocation dynamique car la taille du bloc est modifiable à tout instant dans votre programme.
|
||||
- La gestion de l’allocation mémoire se fait grˆace aux 3 fonctions suivantes :
|
||||
- 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 d'allocation dynamique car la taille du bloc est modifiable à tout instant dans votre programme.
|
||||
- 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 d’exploitation ;
|
||||
- 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 -) ;
|
||||
- free : libération du bloc mémoire lorsqu’il n’est 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.
|
||||
|
||||
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.
|
||||
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
|
||||
@@ -75,13 +75,13 @@ La déclaration d’un pointeur n’engendre pas de réservation mémoire. Si on
|
||||
void *malloc(size t taille);
|
||||
```
|
||||
|
||||
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 ;
|
||||
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 n’est pas initialisé lors de l’allocation ;
|
||||
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) ;
|
||||
|
||||
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.
|
||||
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
|
||||
int *p;
|
||||
@@ -102,13 +102,13 @@ if ( p== NULL) // test création du pointeur
|
||||
void *calloc(size t nombre, size t tailleType);
|
||||
```
|
||||
|
||||
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 ;
|
||||
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 l’allocation ;
|
||||
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) ;
|
||||
|
||||
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.
|
||||
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
|
||||
int *p;
|
||||
@@ -127,15 +127,15 @@ if ( p== NULL) // test création du pointeur
|
||||
void *realloc(void *pointeurBase, size t newTaille);
|
||||
```
|
||||
|
||||
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 ;
|
||||
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 à l’addition de la taille de l’ancien 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 ;
|
||||
|
||||
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 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.
|
||||
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
|
||||
int *p;
|
||||
@@ -160,9 +160,9 @@ La fonction free
|
||||
void *free(void *pointeur);
|
||||
```
|
||||
|
||||
Cette fonction permet de libérer l’espace 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 l’espace 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
|
||||
|
||||
56
string.md
56
string.md
@@ -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
|
||||
|
||||
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.
|
||||
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
|
||||
# include < stdio .h >
|
||||
@@ -67,7 +67,7 @@ int main (int argc , char *argv[])
|
||||
}
|
||||
```
|
||||
|
||||
Pour que la fonction scanf puisse s’occuper 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.
|
||||
|
||||
@@ -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.
|
||||
⇒ Les caractères saisis à partir de l’espace ne sont pas pris en compte mais restent rangés dans le tampon
|
||||
d’entrée.
|
||||
⇒ Les caractères saisis à partir de l'espace ne sont pas pris en compte mais restent rangés dans le tampon
|
||||
d'entrée.
|
||||
{class=warning}
|
||||
|
||||
|
||||
### Le tampon d’entrée ?
|
||||
### Le tampon d'entrée ?
|
||||
|
||||
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 ;
|
||||
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 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 ;
|
||||
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 d’entré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 d’exploitation
|
||||
Le tampon est géré par le système d'exploitation
|
||||
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 qu’elle 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
|
||||
|
||||
On utilise un format particulier de la fonction scanf
|
||||
|
||||
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.
|
||||
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 qu’elle 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
|
||||
# include < stdio .h >
|
||||
@@ -116,7 +116,7 @@ Ainsi, scanf lit alors jusqu’à ce qu’elle tombe sur un caractère interdit.
|
||||
int main (int argc , char *argv[])
|
||||
{
|
||||
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
|
||||
|
||||
char nom [];
|
||||
scanf ("%[[a-z]ˆ\n]",voyelles ) ; // les lettres de l’alphabet en minuscule
|
||||
scanf ("%[[a-z]ˆ\n]",voyelles ) ; // les lettres de l'alphabet en minuscule
|
||||
|
||||
char nom [];
|
||||
scanf ("%[[A-Z]ˆ\n]",voyelles ) ; // les lettres de l’alphabet en majuscule
|
||||
scanf ("%[[A-Z]ˆ\n]",voyelles ) ; // les lettres de l'alphabet en majuscule
|
||||
|
||||
int main (int argc , char *argv[])
|
||||
```
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
#### Longueur d’une chaîne de caractères
|
||||
#### Longueur d'une chaîne de caractères
|
||||
|
||||
size t strlen(const char *str);
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
```c
|
||||
@@ -170,8 +170,8 @@ printf (" Taille de la chaîne = %d\n", longueur ) ;
|
||||
|
||||
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’.
|
||||
Le problème est qu’elle ne fait aucune vérification sur les longueurs des chaînes source et destination.
|
||||
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 qu'elle ne fait aucune vérification sur les longueurs des chaînes source et destination.
|
||||
|
||||
```c
|
||||
char chaineSrc [20] , chaineDest [20];
|
||||
@@ -208,9 +208,9 @@ else
|
||||
|
||||
char *strcat(char *dest, const char *src);
|
||||
|
||||
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.
|
||||
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 s’assurer 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
|
||||
char dest [50] = "bon ";
|
||||
@@ -223,7 +223,7 @@ printf (" Apres : %s\n", dest ) ;
|
||||
|
||||
#### Recherche dans les chaînes de caractères
|
||||
|
||||
Ces fonctions renvoient l’adresse de l’information 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 *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 l’adresse de l’information recherchée en cas de suc
|
||||
|
||||
#### Conversion de chaîne de caractères en valeur numérique
|
||||
|
||||
- int atoi(const char *s); : conversion d’une chaîne de caractères en entier ;
|
||||
- long atol(const char *s); : conversion d’une chaîne de caractères en entier long ;
|
||||
- double atof(const char *s); : conversion d’une chaîne de caractère en double.
|
||||
- int atoi(const char *s); : conversion d'une chaîne de caractères en entier ;
|
||||
- long atol(const char *s); : conversion d'une chaîne de caractères en entier long ;
|
||||
- double atof(const char *s); : conversion d'une chaîne de caractère en double.
|
||||
|
||||
```c
|
||||
#include <stdlib.h>
|
||||
@@ -254,7 +254,7 @@ int main (int argc , char *argv[])
|
||||
|
||||
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, c’est à 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
|
||||
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 !
|
||||
|
||||
```
|
||||
error: ‘age’ undeclared (first use in this function)
|
||||
error: ‘age' undeclared (first use in this function)
|
||||
```
|
||||
|
||||
Voici le code correct
|
||||
|
||||
Reference in New Issue
Block a user