Exercice langage C: Les chaînes de caractères

Exercices sur les chaînes de caractères

1. Initialisation de chaîne de caractère :

Lesquelles des chaînes suivantes sont initialisées correctement ?

Corrigez les déclarations fausses et indiquez pour chaque chaîne de caractères le nombre d'octets qui sera réservé en mémoire.

a) char a[ ] = "un\ndeux\ntrois\n" ;

b) char b[12] = "un deux trois" ;

c) char c[] = 'abcdefg' ;

d) char d[10] = 'x' ;

e) char e[5] = "cinq" ;

f ) char f[] = "Cette " "phrase" "est coupée";

g) char g[2] = { 'a', '\0' };

h) char h[4] = { 'a', 'b', 'c' } ;

i) char i[4] = "'o'"


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
a) char a[] = "un\ndeux\ntrois\n"; 
    Déclaration correcte 
    Espace: 15 octets 
b) char b[12] = "un deux trois"; 
    Déclaration incorrecte: 
    la chaîne d'initialisation dépasse le bloc de mémoire réservé. 
    Correction: char b[14] = "un deux trois"; 
    ou mieux: char b[] = "un deux trois"; 
    Espace: 14 octets 
c) char c[] = 'abcdefg'; 
    Déclaration incorrecte: Les symboles ' et ‘ encadrent des caractères; 
    pour initialiser avec une chaîne de caractères, il faut utiliser les guillemets (ou indiquer une liste de caractères). 
    Correction: char c[] = "abcdefg"; 
    Espace: 8 octets 
d) char d[10] = 'x'; 
    Déclaration incorrecte: Il faut utiliser une liste de caractères ou une chaîne pour l'initialisation 
    Correction: char d[10] = {'x', '\0'} ou mieux: char d[10] = "x"; 
    Espace: 2 octets 
e) char e[5] = "cinq"; 
    Déclaration correcte 
    Espace: 5 octets 
f) char f[] = "Cette ", "phrase", "est coupée"; 
    Déclaration incorrecte 
    On ne peut affecter plusieurs chaînes séparées ainsi. 
g) char g[2] = {'a', '\0'}; 
    Déclaration correcte 
    Espace: 2 octets 
h) char h[4] = {'a', 'b', 'c'}; 
    Déclaration incorrecte: Dans une liste de caractères, il faut aussi indiquer le symbole de fin de chaîne. Correction: char h[4] = {'a', 'b', 'c', '\0'}; 
    Espace: 4 octets 
i) char i[4] = "'o'"; 
    Déclaration correcte, mais d'une chaîne contenant les caractères '\'', 'o', '\'' et '\0'. 
    Espace: 4 octets