Académique Documents
Professionnel Documents
Culture Documents
Plan
1 - Chanes de Caractres
structure fonctions
2 - Fichiers
Programmation C - ENSTA - 2
Types de Base
Les types de base sont pour les entiers
short int long long long char (pour coder les caractres) float double long double
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 3 David Pointcheval LIENS - CNRS
Tableaux
Les tableaux permettent de dfinir sous un nom unique un groupe dobjets de mme type daccder chaque objet par sa position dans le tableau - Quest-ce quune chane de caractres ? - un tableau de caractres
Programmation C - ENSTA - 4
Chane de Caractres
Le type chane de caractres nexiste pas en C (string en java), il sagit donc dun tableau de caractres : char mot[16]; pour dclarer une chane de 16 caractres
mot
t o t o \0
Programmation C - ENSTA - 6
Allocation Dynamique
Un tableau est un pointeur : une chane de caractre est un pointeur sur un caractre char *mot; Allocation :
mot = malloc(8*sizeof(char));
mot
t o t o \0
Programmation C - ENSTA - 8
Tableau = Pointeur
Ainsi char mot[] char *mot : mot est une variable qui pointe sur une chane de caractres (ventuellement nulle, si non alloue) De mme, char **t char *t[]: tableau de chanes de caractres (cf. char *argv[])
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 9
Fonctions Spcifiques
Des fonctions spcifiques existent pour manipuler ces tableaux particuliers. Leurs prototypes sont dcrits dans string.h
strlen strcmp strcpy strcat strdup
Fonction strlen
Comme on la vu, contrairement aux tableaux classiques, une chane de caractres stocke implicitement sa longueur effective (le caractre 0 dsigne la fin du mot) il est possible de connatre cette longueur : la fonction int strlen(char *s)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 11
Fonction strlen
strlen(chaine) retourne le nombre de caractres avant le caractre de fin \0 Ainsi, strlen(mot) retourne 4
mot
t o t o \0
Programmation C - ENSTA - 12
Fonction strcmp
Il est possible de comparer deux mots : cependant, par exemple, le test (mot1 == mot2) char mot1[10] = toto; compare les pointeurs char mot2[10] = tata; if (mot1 == mot2) mot1 et mot2, printf(galit\n pas les contenus en tant ); que chane de caractres.
int strcmp(char *s1, char *s2)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 13
Fonction strcmp
int strcmp(char *s1, char *s2) La fonction strcmp(mot1,mot2) compare les chanes pointes par mot1 et mot2 selon lordre lexicographique (alphabtique), Sachant que lordre sur chaque caractre suit le code ASCII (comparaison de la reprsentation entire du caractre) : 4 < A < H < b < z
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 14
Fonction strcmp
t = strcmp(mot1, mot2)
Fonction strncmp
int strncmp(char *s1,char *s2,int l) La fonction strncmp(mot1,mot2,3) compare les chanes pointes par mot1 et mot2 en ne considrant que les 3 premires lettres de mot1.
David Pointcheval LIENS - CNRS
< = >
< = >
0 0 0
Programmation C - ENSTA - 15
Programmation C - ENSTA - 16
Chanes Constantes
Pour ces trois fonctions, strlen, strcmp et srtncmp, les chanes passes en argument peuvent tre des constantes : strcmp(toto,tata) retournera un entier strictement positif
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 17
Fonction strcpy
Il est possible de copier un mot : cependant, par exemple, laffectation mot1 = mot2 ne remplit pas la chane char mot1[10]; char mot2[10] = toto; mot1 avec le contenu mot1 = mot2; de mot2, mais affecte le pointeur mot1 avec la valeur mot2 char* strcpy(char *s1, char *s2)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 18
Fonction strcpy
char* strcpy(char *s1, char *s2) La fonction strcpy(mot1,mot2) remplit le tableau allou mot1 avec le contenu de mot2 (y compris \0) il faut que la chane mot1 soit alloue, avec une taille suffisante Elle retourne un pointeur sur la premire chane (la seconde pouvant tre constante)
Programmation C - ENSTA - 19
Fonction strncpy
char* strncpy(char *s1,char *s2,int l) La fonction strncpy(mot1,mot2,n) remplit le tableau allou mot1 avec les (au plus) n premiers caractres de mot2 Mais nintroduit pas de \0 si absent dans les n caractres de mot2 ca permet de contrler le nombre de caractres copis
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 20
(sinon n nimporte quoi peu se passer : cf. hackers et buffer overflow) overflow)
Fonction strdup
char* strdup(char *s) La fonction strdup(mot) alloue une chane de caractres de la taille de mot ( laide de malloc) la remplit avec le contenu de mot retourne un pointeur sur cette chane trs pratique : allocation et affectation dune copie
Programmation C - ENSTA - 22
Les Fichiers en C
Un fichier est identifi par un flux de type FILE * Trois flux standard existent stdin : lentre standard, le clavier stdout : la sortie standard, lcran stderr : la sortie des erreurs standard, lcran ouvert en criture Mais il est possible den crer des nouveaux, relis des fichiers
Programmation C - ENSTA - 24
ouvert en lecture
ouvert en criture
Lecture - criture
int fprintf(FILE *F,char *s,) int fscanf(FILE *F,char *s,) fprintf fonctionne comme printf en prcisant le flux (et non sur stdout) retourne le nombre de variables affiches fscanf fonctionne comme scanf en prcisant le flux (et non sur stdin) retourne le nombre de variables scannes
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 26
f = fopen(toto,w)
cre un nouveau flux, en criture cre (ou recre) le fichier toto vide
f = fopen(toto,a)
cre un nouveau flux, en criture ouvre (ou cre vide) le fichier toto avec le curseur en fin de fichier
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 25
Manipulation du Flux
FILE *fopen(char *path,char *mode)
ouvre un nouveau flux
Conclusion
Les chanes de caractres sont des tableaux particuliers : dclaration et allocation dun tableau de caractres fonctions spcifiques pour ces tableaux de caractres Les fichiers se manipulent comme stdin et stdout (avec fprintf et fscanf) cf. polycopi/TP pour des exemples
Programmation C - ENSTA - 29