Programmation en langage C
Fahad R. Golra
Faculté des Sciences et Technologies
Université de Lorraine
Séance 4 – Pointeurs et Chaînes de caractères
2 24/11/2017
Pointeurs
Programmation en langage C, Université de Lorraine
• On utilise des pointeurs dans :
• La transmission des arguments par pointeurs (résultats de
retour)
• La manipulation des tableaux
• Les chaînes de caractères
• Les fichiers : FILE * aLire, * aCreer
• Etc.
3 24/11/2017
Pointeurs
Programmation en langage C, Université de Lorraine
• Un pointeur est une variable dont la valeur est une adresse
• Déclaration : type * identificateur ;
• PointeurSurEntier est une variable qui peut contenir l’adresse
mémoire d’une variable entière
• La valeur d’un pointeur étant une adresse, l’opérateur *
permet d’accéder à la valeur qui est à cette adresse
int *pointeurSurEntier;
int unEntier, *pointeurSurEntier = &unEntier;
int unEntier=5, unAutre, *pointeur = &unEntier;
unAutre = *pointeur /*unAutre prend la valeur 5*/
4 24/11/2017
Operateurs & et *
Programmation en langage C, Université de Lorraine
• Adresse de : &
• Syntaxe : &variable , donne l'adresse mémoire de la variable
• Dont l'adresse est : *
• Syntaxe *expression : donne le mot mémoire dont l'adresse
est donnée par l'expression
int i, adr;
adr = &i;
int i, *adr;
i=1;
adr=&i;
printf("%d", *adr);
Affiche "1"
5 24/11/2017
Exemple : Variable
Programmation en langage C, Université de Lorraine
• On	définit	ainsi	une	variable	
a associée	à	un	
emplacement	mémoire	
• Pour	instancier	a,	il	suffit	
d’affecter	une	valeur	à	a
int a;
a= 5;
6 24/11/2017
Exemple : Pointeurs
Programmation en langage C, Université de Lorraine
• On	définit	une	pointeur	p qui	
va	contenir	une	adresse :	
l’adresse	de	l’objet	que	va	
pointer	la	pointeur	p,	ici	a.
• On	ne	peut	affecter	à	p
qu’une	adresse
int a;
int *p;
p = &a;
*p = 6;
De cette manière p va
pointer sur l’objet que
désigne l’identificateur a.
Ca va instancier l’objet que
pointe p
Quelle valeur est maintenant associée à a ? 6
7 24/11/2017
Rappelez-vous !!! Fonctions
Programmation en langage C, Université de Lorraine
# include <stdio.h>
void permute(int*, int*);
int main(void)
{
int x = 3, y = 4;
permute (&x, &y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
# include <stdio.h>
void permute(int, int);
int main(void)
{
int x = 3, y = 4;
permute (x, y);
printf("x = %dn", x);
printf("y = %dn", y);
return 0;
}
void permute(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
Passage par référence Passage par valeur
8 24/11/2017
Chaîne de caractères
Programmation en langage C, Université de Lorraine
• On	définit	ainsi	un	pointeur	
"chaine"	qui	va	pointer	sur	
une	zone	mémoire	de	8	
octets	consécutifs	(nous	
supposons	ici	qu’un	
caractère	ne	nécessite	qu’un	
octet	pour	son	codage).	
char *chaine="bonjour";
*(chaine+1) caractère ‘o’
*(chaine+2) caractère ‘n’
*(chaine+3) caractère ‘j’
*(chaine+4) caractère ‘o’
*chaine caractère ‘b’
*(chaine+5) caractère ‘u’
*(chaine+6) caractère ‘r’
*(chaine+7) caractère ‘0’
le caractère nul ‘0’ termine toute
chaîne de caractère. C’est la raison
pour laquelle la chaîne de 7 caractères
˝bonjour˝ est représentée en mémoire
par une zone consécutive de 8 octets.
9 24/11/2017
Chaîne de caractères
Programmation en langage C, Université de Lorraine
• On	définit	ainsi	un	pointeur	
"chaine"	qui	va	pointer	sur	
une	zone	mémoire	de	8	
octets	consécutifs	(nous	
supposons	ici	qu’un	
caractère	ne	nécessite	qu’un	
octet	pour	son	codage).	
char *chaine="bonjour";
| 'b' | 'o' | 'n' | 'j' | 'o' | 'u' | 'r' |'0'|
|_____|_____|_____|_____|_____|_____|_____|____|
Le ‘0’ marque la fin de la chaîne de caractères
10 24/11/2017
Exemple 1– Chaînes de caractères
Programmation en langage C, Université de Lorraine
• Un programme qui initialise une variable pointeur adr qui
pointe sur la chaîne de caractères "bonjour" et qui affiche à
l’écran chaque caractère de "bonjour".
#include <stdio.h>
int main(void)
{
char *adr = "bonjour";
while (*adr)
{
printf (" %cn", *adr);
adr++;
}
return 0;
}
11 24/11/2017
Chaîne de caractères (Explicit vs. Implicit)
Programmation en langage C, Université de Lorraine
• Lorsque	l’on	déclare	une	chaîne	de	n caractères	à	l’aide	d’un	
pointeur	explicite,	le	compilateur	réserve	un	emplacement	
mémoire	de	n+1 octets	exactement.
• Il	est	possible	de	déclarer	une	chaîne	de	n caractères	à	l’aide	d’un	
pointeur	implicit :
char *chaine="bonjour"; 8 octets
char chaine[8]="bonjour";
12 24/11/2017
Sur-dimmensionner une chaîne de caractères
Programmation en langage C, Université de Lorraine
• Il est possible de sur-dimmensionner une variable chaîne de
caractères ainsi :
• ch est un pointeur implicite qui pointe sur une zone mémoire
de 20 octets.
• Les 8 premiers octets sont initialisés avec les
caractères :{‘b’,’o’,’n’,’j’,’o’,’u’,’r’,’0’}.
• Les 12 autres octets de ch sont arbitraires.
• L’intérêt de sur-dimmensionner une chaîne de caractères sera vu
lorsque l’on traitera des fonctions standards de le bibliothèque de
chaîne de caractères <string.h>.
char ch[20]="bonjour";
13 24/11/2017
Chaîne de caractères explicit
Programmation en langage C, Université de Lorraine
• À la différence d'un tableau,
les chaînes de caractères
respectent une convention :
se terminer par le caractère
nul, noté '0' (antislash-zero).
• Ainsi, pour construire une
chaîne de caractères « à la
main », il ne faut pas oublier
ce caractère final.
#include <stdio.h>
#include <string.h>
int main(void)
{
char chiffres[11];
int i;
for (i = 0 ; i < 10 ; i++)
chiffres [i] = '0' +i;
chiffres[10] = '0';
printf("chaine obtenue : %s",
chiffres);
return 0;
}
14 24/11/2017
Chaîne de caractères explicit
Programmation en langage C, Université de Lorraine
• Il	est	possible	de	modifier	
une	chaîne	de	caractères	
quelle	que	soit	la	manière	
dont	on	la	déclare .
• Dans	cet	exemple	on	a	crée	
une	chaîne	formée	des	10	
caractères	correspondant	
aux	chiffres	de	0	à	9 .
#include <stdio.h>
#include <string.h>
int main(void)
{
char chiffres[11];
int i;
for (i = 0 ; i < 10 ; i++)
chiffres [i] = '0' +i;
chiffres[10] = '0';
printf("chaine obtenue : %s",
chiffres);
return 0;
}
15 24/11/2017
Fonctions principales
Programmation en langage C, Université de Lorraine
• Catégories importantes de fonctions pour les chaînes de
caractères :
• entrées-sorties standard de chaînes
• tailles de chaînes
• copie de chaînes
• concaténation de chaînes
• comparaison de chaînes
• recherche de caractères ou de sous-chaines dans une chaîne
• conversion de chaîne en nombre.
16 24/11/2017
Entrées-sorties standard de chaînes
Programmation en langage C, Université de Lorraine
• Lecture au clavier d’une chaîne de caractères
• scanf
• gets
• Pour	imprimer	une	chaîne	de	caractères	à	l’écran
• printf
• puts
17 24/11/2017
Entrées-sorties – scanf / printf
Programmation en langage C, Université de Lorraine
• scanf("%s", char *chaine)
• Va saisir une chaîne
jusqu’à un séparateur.
• printf("%s", char *chaine)
• Va afficher à l’écran la
chaîne.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *ch;
printf("Entrez un phrase : ");
scanf("%s",ch);
printf("Le phrase est : %s", ch);
return 0;
}
18 24/11/2017
Entrées-sorties – gets/ puts
Programmation en langage C, Université de Lorraine
• gets(char *chaine)
• Va saisir une chaîne
jusqu’au retour de chariot
(‘0’)
• puts(char *chaine)
• Va afficher	à	l’écran	la	
chaîne.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *ch;
printf("Entrez un phrase : ");
gets(ch);
printf("Le phrase est : ");
puts(ch);
return 0;
}
19 24/11/2017
La fonction strlen
Programmation en langage C, Université de Lorraine
• La fonction strlen calcule le
nombre de caractères de la
chaîne passée en
paramètre (le caractère de
fin de chaîne : ‘0’) n’est pas
pris en compte.
size_t strlen(const char *s);
#include <stdio.h>
#include <string.h>
int main(void)
{
char *chaine1 = "bonjour";
char chaine2[10] = "salut";
int i = strlen(chaine1);
int j = strlen(chaine2);
printf("chaine1 : %sn", chaine1);
printf("taille chaine1 : %dn", i);
printf("chaine2 : %sn", chaine2);
printf("taille chaine2 : %dn", j);
return 0;
}
20 24/11/2017
La fonction strcpy
Programmation en langage C, Université de Lorraine
• La fonction strcpy copie le
contenu de la chaîne source
dans la chaîne but.
• Retourne	l'adresse	de	but.
char * strcpy (char *but, char *source)
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch1[20];
char ch2[10] = "bonjour";
char *ch3 = "salut";
strcpy(ch1, ch3);
printf("ch1 : %sn", ch1);
strcpy(ch1, ch2);
printf("ch1 : %sn", ch1);
strcpy(ch1, "hello");
printf("ch1 : %sn", ch1);
return 0;
}
21 24/11/2017
La fonction strcpy -- Attention !!!
Programmation en langage C, Université de Lorraine
• La	fonction	strcpy n’effectue	
aucun	contrôle	sur	les	
longueurs	des	chaînes	source	
et	but.	C’est	le	rôle	du	
programmeur	de	faire	
attention	à	ce	qu’il	fait .
• ch contient	6	octets	et	la	
chaîne	"bonjour" nécessite	8	
octets	pour		son	stockage :	
donc	le	strcpy va	écraser	2	
octets	en	fin	de	tableau	ou	
lancer	une	erreur.
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[6] = "hello";
strcpy(ch, "bonjour");
printf("ch : %sn", ch);
return 0;
}
22 24/11/2017
La fonction strcat
Programmation en langage C, Université de Lorraine
• La	fonction	strcat permet	de	
concaténer	deux	chaînes	de	
caractères,	i.e.,	de	les	mettre	
bout	à	bout.
char *strcat ( char *but, char *source)
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[50] = "bonjour";
char *per = "monsieur";
printf("avant : %sn", ch);
strcat(ch, per);
printf("apres : %sn", ch);
return 0;
}
23 24/11/2017
La fonction strcat – Attention!!!
Programmation en langage C, Université de Lorraine
• Aucun contrôle de longueur
n’est réalisé par la fonction
strcat :
• il faut que l’emplacement
réservé pour la première
chaîne soit suffisant pour
y recevoir la partie à lui
concaténer.
#include <stdio.h>
#include <string.h>
int main(void)
{
char ch[10]="bonjour";
char *per= "monsieur";
strcat(ch,per) ;
printf ("ch : %sn", ch);
return 0;
}
24 24/11/2017
La fonction strcmp
Programmation en langage C, Université de Lorraine
• La	fonction	strcmp permet	
de	comparer	deux	chaînes	
de	caractères	dans	l’ordre	
lexicographique.
• Retourne :	
• négative si	chaine1	arrive	
avant	chaine2	
• positive si	chaine1	arrive	
après	chaine2	
• nulle si	les	deux	chaînes	
sont	identiques.	
int strcmp (char *chaine1, *chaine2)
#include <stdio.h>
#include <string.h>
int main(void)
{
int res;
res = strcmp("bonjour", "monsieur");
printf ("Comparaison : %dn", res);
res = strcmp("bonjour", "bonjour");
printf ("Comparaison : %dn", res);
res = strcmp("monsieur", "bonjour");
printf ("Comparaison : %dn", res);
return 0;
}
25 24/11/2017
La fonction strchr
Programmation en langage C, Université de Lorraine
• La fonction strchr retourne
l’adresse de la première
occurrence du caractère
dans la chaîne, NULL si le
caractère n’y est pas.
char * strchr (char *chaine, char c)
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ch ="bonjour";
ch=strchr (ch, 'o');
printf("Ch : %s", ch);
return 0;
}
26 24/11/2017
La fonction strchr - Exemple
Programmation en langage C, Université de Lorraine
• ad contient l’adresse du
premier ‘e’ dans ch
• si ch contient le caractère 'e'
bloc1sera exécuté et sinon
c’est bloc2 qui est exécuté.
char * strchr (char *chaine, char c)
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ch="bonjour monsieur";
char *ad = strchr(ch, 'e');
if(ad)
printf("ch contient en");
else
printf("ch ne contient pas en");
return 0;
}
27 24/11/2017
La fonction strstr
Programmation en langage C, Université de Lorraine
• La fonction strstr permet de
rechercher la première
occurrence d’une chaîne
donnée (sous-chaîne) dans
une autre.
• Retourne	l'adresse	de	la	
première	occurrence	
complète	de	la	sous-chaîne	
cherchée,	sinon	NULL.
char *strstr (char *ch1, char *ch2)
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ch ="bonjour monsieur";
char *per="monsieur";
ch=strstr(ch, per);
printf("Ch : %s", ch);
return 0;
}
28 24/11/2017
La fonction strpbrk
Programmation en langage C, Université de Lorraine
• La fonction strpbrk permet
de rechercher dans une
chaîne la première
occurrence d’un des
caractères appartenant à un
ensemble.
• Retourne l'adresse de la
première occurrence dans
chaine1 de l’un des
caractères de chaine2, NULL
si inexistence.
char *strpbrk (char *ch1, char *ch2)
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ch ="bonjour monsieur";
char *per="nancy";
ch=strpbrk(ch, per) ;
printf("Ch : %s", ch);
return 0;
}
29 24/11/2017
Conversion de chaînes en nombres
Programmation en langage C, Université de Lorraine
• Les	trois	fonctions	les	plus	
utilisées	sont :
1. atof - une chaîne en double
2. atoi - une chaîne en int
3. atol - une chaîne en long
int
• La	librairie	à	inclure	est	
stdlib.h
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
double d;
int i;
long l;
char *chd = "-3.141592";
char *chi = "-122";
char *chl = "234567890";
d = atof(chd);
i = atoi(chi);
l = atol(chl);
printf("chd : %lfn", d);
printf("chi : %dn", i);
printf("chl : %ldn", l);
return 0;
}

Seance 4- Programmation en langage C

  • 1.
    Programmation en langageC Fahad R. Golra Faculté des Sciences et Technologies Université de Lorraine Séance 4 – Pointeurs et Chaînes de caractères
  • 2.
    2 24/11/2017 Pointeurs Programmation enlangage C, Université de Lorraine • On utilise des pointeurs dans : • La transmission des arguments par pointeurs (résultats de retour) • La manipulation des tableaux • Les chaînes de caractères • Les fichiers : FILE * aLire, * aCreer • Etc.
  • 3.
    3 24/11/2017 Pointeurs Programmation enlangage C, Université de Lorraine • Un pointeur est une variable dont la valeur est une adresse • Déclaration : type * identificateur ; • PointeurSurEntier est une variable qui peut contenir l’adresse mémoire d’une variable entière • La valeur d’un pointeur étant une adresse, l’opérateur * permet d’accéder à la valeur qui est à cette adresse int *pointeurSurEntier; int unEntier, *pointeurSurEntier = &unEntier; int unEntier=5, unAutre, *pointeur = &unEntier; unAutre = *pointeur /*unAutre prend la valeur 5*/
  • 4.
    4 24/11/2017 Operateurs &et * Programmation en langage C, Université de Lorraine • Adresse de : & • Syntaxe : &variable , donne l'adresse mémoire de la variable • Dont l'adresse est : * • Syntaxe *expression : donne le mot mémoire dont l'adresse est donnée par l'expression int i, adr; adr = &i; int i, *adr; i=1; adr=&i; printf("%d", *adr); Affiche "1"
  • 5.
    5 24/11/2017 Exemple :Variable Programmation en langage C, Université de Lorraine • On définit ainsi une variable a associée à un emplacement mémoire • Pour instancier a, il suffit d’affecter une valeur à a int a; a= 5;
  • 6.
    6 24/11/2017 Exemple :Pointeurs Programmation en langage C, Université de Lorraine • On définit une pointeur p qui va contenir une adresse : l’adresse de l’objet que va pointer la pointeur p, ici a. • On ne peut affecter à p qu’une adresse int a; int *p; p = &a; *p = 6; De cette manière p va pointer sur l’objet que désigne l’identificateur a. Ca va instancier l’objet que pointe p Quelle valeur est maintenant associée à a ? 6
  • 7.
    7 24/11/2017 Rappelez-vous !!!Fonctions Programmation en langage C, Université de Lorraine # include <stdio.h> void permute(int*, int*); int main(void) { int x = 3, y = 4; permute (&x, &y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } # include <stdio.h> void permute(int, int); int main(void) { int x = 3, y = 4; permute (x, y); printf("x = %dn", x); printf("y = %dn", y); return 0; } void permute(int a, int b) { int temp; temp = a; a = b; b = temp; } Passage par référence Passage par valeur
  • 8.
    8 24/11/2017 Chaîne decaractères Programmation en langage C, Université de Lorraine • On définit ainsi un pointeur "chaine" qui va pointer sur une zone mémoire de 8 octets consécutifs (nous supposons ici qu’un caractère ne nécessite qu’un octet pour son codage). char *chaine="bonjour"; *(chaine+1) caractère ‘o’ *(chaine+2) caractère ‘n’ *(chaine+3) caractère ‘j’ *(chaine+4) caractère ‘o’ *chaine caractère ‘b’ *(chaine+5) caractère ‘u’ *(chaine+6) caractère ‘r’ *(chaine+7) caractère ‘0’ le caractère nul ‘0’ termine toute chaîne de caractère. C’est la raison pour laquelle la chaîne de 7 caractères ˝bonjour˝ est représentée en mémoire par une zone consécutive de 8 octets.
  • 9.
    9 24/11/2017 Chaîne decaractères Programmation en langage C, Université de Lorraine • On définit ainsi un pointeur "chaine" qui va pointer sur une zone mémoire de 8 octets consécutifs (nous supposons ici qu’un caractère ne nécessite qu’un octet pour son codage). char *chaine="bonjour"; | 'b' | 'o' | 'n' | 'j' | 'o' | 'u' | 'r' |'0'| |_____|_____|_____|_____|_____|_____|_____|____| Le ‘0’ marque la fin de la chaîne de caractères
  • 10.
    10 24/11/2017 Exemple 1–Chaînes de caractères Programmation en langage C, Université de Lorraine • Un programme qui initialise une variable pointeur adr qui pointe sur la chaîne de caractères "bonjour" et qui affiche à l’écran chaque caractère de "bonjour". #include <stdio.h> int main(void) { char *adr = "bonjour"; while (*adr) { printf (" %cn", *adr); adr++; } return 0; }
  • 11.
    11 24/11/2017 Chaîne decaractères (Explicit vs. Implicit) Programmation en langage C, Université de Lorraine • Lorsque l’on déclare une chaîne de n caractères à l’aide d’un pointeur explicite, le compilateur réserve un emplacement mémoire de n+1 octets exactement. • Il est possible de déclarer une chaîne de n caractères à l’aide d’un pointeur implicit : char *chaine="bonjour"; 8 octets char chaine[8]="bonjour";
  • 12.
    12 24/11/2017 Sur-dimmensionner unechaîne de caractères Programmation en langage C, Université de Lorraine • Il est possible de sur-dimmensionner une variable chaîne de caractères ainsi : • ch est un pointeur implicite qui pointe sur une zone mémoire de 20 octets. • Les 8 premiers octets sont initialisés avec les caractères :{‘b’,’o’,’n’,’j’,’o’,’u’,’r’,’0’}. • Les 12 autres octets de ch sont arbitraires. • L’intérêt de sur-dimmensionner une chaîne de caractères sera vu lorsque l’on traitera des fonctions standards de le bibliothèque de chaîne de caractères <string.h>. char ch[20]="bonjour";
  • 13.
    13 24/11/2017 Chaîne decaractères explicit Programmation en langage C, Université de Lorraine • À la différence d'un tableau, les chaînes de caractères respectent une convention : se terminer par le caractère nul, noté '0' (antislash-zero). • Ainsi, pour construire une chaîne de caractères « à la main », il ne faut pas oublier ce caractère final. #include <stdio.h> #include <string.h> int main(void) { char chiffres[11]; int i; for (i = 0 ; i < 10 ; i++) chiffres [i] = '0' +i; chiffres[10] = '0'; printf("chaine obtenue : %s", chiffres); return 0; }
  • 14.
    14 24/11/2017 Chaîne decaractères explicit Programmation en langage C, Université de Lorraine • Il est possible de modifier une chaîne de caractères quelle que soit la manière dont on la déclare . • Dans cet exemple on a crée une chaîne formée des 10 caractères correspondant aux chiffres de 0 à 9 . #include <stdio.h> #include <string.h> int main(void) { char chiffres[11]; int i; for (i = 0 ; i < 10 ; i++) chiffres [i] = '0' +i; chiffres[10] = '0'; printf("chaine obtenue : %s", chiffres); return 0; }
  • 15.
    15 24/11/2017 Fonctions principales Programmationen langage C, Université de Lorraine • Catégories importantes de fonctions pour les chaînes de caractères : • entrées-sorties standard de chaînes • tailles de chaînes • copie de chaînes • concaténation de chaînes • comparaison de chaînes • recherche de caractères ou de sous-chaines dans une chaîne • conversion de chaîne en nombre.
  • 16.
    16 24/11/2017 Entrées-sorties standardde chaînes Programmation en langage C, Université de Lorraine • Lecture au clavier d’une chaîne de caractères • scanf • gets • Pour imprimer une chaîne de caractères à l’écran • printf • puts
  • 17.
    17 24/11/2017 Entrées-sorties –scanf / printf Programmation en langage C, Université de Lorraine • scanf("%s", char *chaine) • Va saisir une chaîne jusqu’à un séparateur. • printf("%s", char *chaine) • Va afficher à l’écran la chaîne. #include <stdio.h> #include <stdlib.h> int main(void) { char *ch; printf("Entrez un phrase : "); scanf("%s",ch); printf("Le phrase est : %s", ch); return 0; }
  • 18.
    18 24/11/2017 Entrées-sorties –gets/ puts Programmation en langage C, Université de Lorraine • gets(char *chaine) • Va saisir une chaîne jusqu’au retour de chariot (‘0’) • puts(char *chaine) • Va afficher à l’écran la chaîne. #include <stdio.h> #include <stdlib.h> int main(void) { char *ch; printf("Entrez un phrase : "); gets(ch); printf("Le phrase est : "); puts(ch); return 0; }
  • 19.
    19 24/11/2017 La fonctionstrlen Programmation en langage C, Université de Lorraine • La fonction strlen calcule le nombre de caractères de la chaîne passée en paramètre (le caractère de fin de chaîne : ‘0’) n’est pas pris en compte. size_t strlen(const char *s); #include <stdio.h> #include <string.h> int main(void) { char *chaine1 = "bonjour"; char chaine2[10] = "salut"; int i = strlen(chaine1); int j = strlen(chaine2); printf("chaine1 : %sn", chaine1); printf("taille chaine1 : %dn", i); printf("chaine2 : %sn", chaine2); printf("taille chaine2 : %dn", j); return 0; }
  • 20.
    20 24/11/2017 La fonctionstrcpy Programmation en langage C, Université de Lorraine • La fonction strcpy copie le contenu de la chaîne source dans la chaîne but. • Retourne l'adresse de but. char * strcpy (char *but, char *source) #include <stdio.h> #include <string.h> int main(void) { char ch1[20]; char ch2[10] = "bonjour"; char *ch3 = "salut"; strcpy(ch1, ch3); printf("ch1 : %sn", ch1); strcpy(ch1, ch2); printf("ch1 : %sn", ch1); strcpy(ch1, "hello"); printf("ch1 : %sn", ch1); return 0; }
  • 21.
    21 24/11/2017 La fonctionstrcpy -- Attention !!! Programmation en langage C, Université de Lorraine • La fonction strcpy n’effectue aucun contrôle sur les longueurs des chaînes source et but. C’est le rôle du programmeur de faire attention à ce qu’il fait . • ch contient 6 octets et la chaîne "bonjour" nécessite 8 octets pour son stockage : donc le strcpy va écraser 2 octets en fin de tableau ou lancer une erreur. #include <stdio.h> #include <string.h> int main(void) { char ch[6] = "hello"; strcpy(ch, "bonjour"); printf("ch : %sn", ch); return 0; }
  • 22.
    22 24/11/2017 La fonctionstrcat Programmation en langage C, Université de Lorraine • La fonction strcat permet de concaténer deux chaînes de caractères, i.e., de les mettre bout à bout. char *strcat ( char *but, char *source) #include <stdio.h> #include <string.h> int main(void) { char ch[50] = "bonjour"; char *per = "monsieur"; printf("avant : %sn", ch); strcat(ch, per); printf("apres : %sn", ch); return 0; }
  • 23.
    23 24/11/2017 La fonctionstrcat – Attention!!! Programmation en langage C, Université de Lorraine • Aucun contrôle de longueur n’est réalisé par la fonction strcat : • il faut que l’emplacement réservé pour la première chaîne soit suffisant pour y recevoir la partie à lui concaténer. #include <stdio.h> #include <string.h> int main(void) { char ch[10]="bonjour"; char *per= "monsieur"; strcat(ch,per) ; printf ("ch : %sn", ch); return 0; }
  • 24.
    24 24/11/2017 La fonctionstrcmp Programmation en langage C, Université de Lorraine • La fonction strcmp permet de comparer deux chaînes de caractères dans l’ordre lexicographique. • Retourne : • négative si chaine1 arrive avant chaine2 • positive si chaine1 arrive après chaine2 • nulle si les deux chaînes sont identiques. int strcmp (char *chaine1, *chaine2) #include <stdio.h> #include <string.h> int main(void) { int res; res = strcmp("bonjour", "monsieur"); printf ("Comparaison : %dn", res); res = strcmp("bonjour", "bonjour"); printf ("Comparaison : %dn", res); res = strcmp("monsieur", "bonjour"); printf ("Comparaison : %dn", res); return 0; }
  • 25.
    25 24/11/2017 La fonctionstrchr Programmation en langage C, Université de Lorraine • La fonction strchr retourne l’adresse de la première occurrence du caractère dans la chaîne, NULL si le caractère n’y est pas. char * strchr (char *chaine, char c) #include <stdio.h> #include <string.h> int main(void) { char *ch ="bonjour"; ch=strchr (ch, 'o'); printf("Ch : %s", ch); return 0; }
  • 26.
    26 24/11/2017 La fonctionstrchr - Exemple Programmation en langage C, Université de Lorraine • ad contient l’adresse du premier ‘e’ dans ch • si ch contient le caractère 'e' bloc1sera exécuté et sinon c’est bloc2 qui est exécuté. char * strchr (char *chaine, char c) #include <stdio.h> #include <string.h> int main(void) { char *ch="bonjour monsieur"; char *ad = strchr(ch, 'e'); if(ad) printf("ch contient en"); else printf("ch ne contient pas en"); return 0; }
  • 27.
    27 24/11/2017 La fonctionstrstr Programmation en langage C, Université de Lorraine • La fonction strstr permet de rechercher la première occurrence d’une chaîne donnée (sous-chaîne) dans une autre. • Retourne l'adresse de la première occurrence complète de la sous-chaîne cherchée, sinon NULL. char *strstr (char *ch1, char *ch2) #include <stdio.h> #include <string.h> int main(void) { char *ch ="bonjour monsieur"; char *per="monsieur"; ch=strstr(ch, per); printf("Ch : %s", ch); return 0; }
  • 28.
    28 24/11/2017 La fonctionstrpbrk Programmation en langage C, Université de Lorraine • La fonction strpbrk permet de rechercher dans une chaîne la première occurrence d’un des caractères appartenant à un ensemble. • Retourne l'adresse de la première occurrence dans chaine1 de l’un des caractères de chaine2, NULL si inexistence. char *strpbrk (char *ch1, char *ch2) #include <stdio.h> #include <string.h> int main(void) { char *ch ="bonjour monsieur"; char *per="nancy"; ch=strpbrk(ch, per) ; printf("Ch : %s", ch); return 0; }
  • 29.
    29 24/11/2017 Conversion dechaînes en nombres Programmation en langage C, Université de Lorraine • Les trois fonctions les plus utilisées sont : 1. atof - une chaîne en double 2. atoi - une chaîne en int 3. atol - une chaîne en long int • La librairie à inclure est stdlib.h #include <stdio.h> #include <stdlib.h> int main(void) { double d; int i; long l; char *chd = "-3.141592"; char *chi = "-122"; char *chl = "234567890"; d = atof(chd); i = atoi(chi); l = atol(chl); printf("chd : %lfn", d); printf("chi : %dn", i); printf("chl : %ldn", l); return 0; }