• Aucun résultat trouvé

TD5 – Manipulations de pointeurs

N/A
N/A
Protected

Academic year: 2022

Partager "TD5 – Manipulations de pointeurs"

Copied!
2
0
0

Texte intégral

(1)

TD5 – Manipulations de pointeurs

Langage C (LC4) semaine du1ermars

1 Arithmétique des pointeurs

Question 1. On considère les déclarations suivantes.

struct st3 { int a; int b; int c; };

int t[30];

int *p = t;

char *s = (char *) t;

struct st3 *pst3 = (struct st3 *) t;

Indiquez les valeurs des expressions ci-dessous après l’exécution de la boucle suivante.

int i;

for (i = 0; i < 30; i++) t[i] = 10 * i;

On supposera qu’on travaille sur une machine où la taille desintet descharvalent respec- tivement 4 et 1.

1. *p + 2 2. *(p + 2) 3. &p + 1 4. &t[4] - 3 5. t + 3 6. &t[7] - p 7. p + (*p - 10)

8. *(p + *(p + 8)- t[7]) 9. s[4]

10. &(s[4])- &(s[2]) 11. pst3[3].b

12. ((struct st3 *)&t[6])- pst3

1

(2)

2 Chaînes de caractères

Quelques remarques préliminaires :

– pour stocker une chaîne dencaractères, il est nécessaire de réservern+ 1caractères, pour pouvoir stocker le’\0’indiquant la fin de la chaine ;

– ne pas confondre : – le caractère’\0’;

– une chaîne vide, qu’on peut noter""et qui est représentée en mémoire par une chaîne dont la première case a pour valeur’\0’;

– la valeurNULL, qui peut être affectée à une variable de typechar *et qui indique qu’elle ne pointe vers aucune zone de mémoire.

Vous implémenterez les fonctions suivantes.

Question 2. int strlen(const char *)renvoie le nombre de caractères d’une chaîne. Le const char *spécifie que le contenu de la chaîne ne sera pas modifié par la fonction.

Question 3. int strcmp(const char *s1, const char *s2)compare deux chaîness1 et s2 : elle renvoie un nombre négatif si la chaîne s1 est avant s2 (pour l’ordre lexi- cographique, l’ordre d’un dictionnaire usuel), 0 si elles sont égales, et un nombre positif sinon.

Question 4. int palindrome(const char *)(qui n’est pas dans<string.h>) teste si une chaîne est un palindrome, c’est-à-dire une chaîne identique qu’on la lise de la gauche vers la droite ou de la droite vers la gauche (par exemple les mots lavalousubitomotibus).

Question 5. char *strchr(const char *s, int c)renvoie l’adresse de la première oc- currence du caractèrecdans la chaînesen partant du début de la chaîne.

Question 6. char *strsep(char **stringp, const char *separateurs) coupe une chaîne en deux à la première occurrence d’un caractère séparateur.

La chaîne à couper est *stringp, la chaîne separateurs contient tous les caractères sé- parateurs. Le premier caractère séparateur trouvé est remplacé par’\0’dans*stringpet la valeur de*stringp est modifiée (d’où l’intérêt de passer l’adresse de la chaîne) pour pointer sur le caractère suivant. L’ancienne valeur de*stringpest renvoyée.

Question 7. la fonction char *strcpy(char *dst, const char *src) copie la chaîne srcdans dst, y compris le caractère de fin de chaîne (et renvoie dst). La chaînedst est supposée pointer vers une zone allouée avec une taille suffisante.

Question 8. char *strcat(char *dst, const char *s)concatène la chaînesà la suite dedst(et renvoiedst). Plus précisément, elle écrit par-dessus le caractère’\0’à la fin de dstpuis ajoute un’\0’à la fin de la concaténation.

Comme pourstrcpy(), la chaînedstest supposée pointer vers une zone allouée avec une taille suffisante.

Remarque : la plupart de ces fonctions se trouvent déjà implémentées dans la bibliothèque

<string.h>.

2

Références

Documents relatifs

Q13 : Tracer le spectre en dBV d’un signal triangulaire symétrique, de fréquence 50kHz et dont la valeur efficace est de 3V pour des fréquences inférieures à

[r]

Based on recent studies with KAT1 indicating that certain amino acids close to the pore motif may also be involved in the proton modulation network (Gonzalez et al., 2012), we

- VorJere RaJosbel Kornplelf - Qech tes creLcllein Korndelt - IinKes Çebelbein KomplLlf Fo ur c.he ava nt .om Plète, -. Tot6

Zig vient de passer son oral de mathématiques au concours d’entrée à l’I.R.M.( Institut des Récréations Mathématiques) et Puce lui demande l’énoncé de l’exercice sur

Je mets les pièces « 3 contre 4 » sur cette même balance et je note également lequel est le plus lourd.. J’ajoute alors la pièce la plus lourde dans le sous-ensemble le plus

Quelle est la position de ce point qui rend maximal le produit des distances de M aux faces du tétraèdre. Soient d1,d2,d3,d4 les distances de M aux faces du tétraèdre initial T ,

Dans le cas où l’élève et ses parents ou représentants légaux ne répondraient pas à la convocation, sans raison valable, un retrait temporaire de la carte d’abonnement