Vous êtes sur la page 1sur 8

Programmation C

Chanes de caractres Entres-sorties


David Pointcheval

Plan

1 - Chanes de Caractres
structure fonctions

2 - Fichiers

E-mail : David.Pointcheval@ens.fr Web : http://www.di.ens.fr/~pointche/enseignement/ensta

David Pointcheval LIENS - CNRS

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

pour les flottants

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

Codage des Chanes


Tableau classique ? Non: affectation particulire : char mot[8] = toto; nombre effectif de cases connu : le caractre \0 dsigne la fin
mot

mot

David Pointcheval LIENS - CNRS

Programmation C - ENSTA - 5 David Pointcheval LIENS - CNRS

t o t o \0

Programmation C - ENSTA - 6

Longueur dune Chane


La chane dclare par char mot[8]; peut stocker 8 caractres, dont \0 un mot dau plus 7 caractres Longueur effective : jusquau caractre \0
mot

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

David Pointcheval LIENS - CNRS

t o t o \0

Programmation C - ENSTA - 7 David Pointcheval LIENS - CNRS

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

Pour des informations, ne pas hsiter consulter le man : man strlen


David Pointcheval LIENS - CNRS Programmation C - ENSTA - 10

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

David Pointcheval LIENS - CNRS

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

mot1 mot1 mot1

< = >

mot2 t mot2 t mot2 t

< = >

0 0 0

David Pointcheval LIENS - CNRS

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)

David Pointcheval LIENS - CNRS

Fonctions strcat, strncat


char* strcat(char *s1,char *s2) char* strncat(char *s1,char *s2,int l) La fonction strcat(mot1,mot2) concatne le contenu de mot2 mot1 il faut la place ncessaire la fin de mot1 La fonction strncat(mot1,mot2,n) fait de mme avec seulement les n premiers caractres de mot2 Elle retourne un pointeur sur la premire chane (la seconde pouvant tre constante)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 21

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

(ou le pointeur NULL si mmoire insuffisante)

David Pointcheval LIENS - CNRS

Fonctions printf, scanf


printf(%s,mot); Affichage du contenu de la chane mot scanf(%s,mot); Scannage dun mot (avant le prochain espace) qui est stock dans la chane mot Cette chane doit tre alloue de taille suffisante.
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 23

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

David Pointcheval LIENS - CNRS

La Cration dun Flux


FILE *fopen(char *path,char *mode) f = fopen(toto,r)
cre un nouveau flux, en lecture, sur le fichier toto (dans le rpertoire courant)

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

Lecture - criture de Caractres


int fputc(char c,FILE *F) char fgetc(FILE *F) fputc(c,F) crit c dans le flux F la position du curseur, et avance le curseur dun cran fgetc(F) lit et retourne le caractre sous le curseur, et avance le curseur dun cran
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 27

Manipulation du Flux
FILE *fopen(char *path,char *mode)
ouvre un nouveau flux

int feof(FILE *f)


teste si le curseur a franchi la fin de fichier et retourne : 0 pour faux et non nul pour vrai

void rewind(FILE *f)


rinitialise le curseur en tte de fichier

int fclose(FILE *f)


ferme le flux (le nombre de flux ouverts est limit)
David Pointcheval LIENS - CNRS Programmation C - ENSTA - 28

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

David Pointcheval LIENS - CNRS

Vous aimerez peut-être aussi