projprog/C7.md
2021-10-18 08:24:56 +02:00

1.8 KiB

C7

Exercice 1

Le code affiche le caractère a qui a pour code ascii 97 = 48(code ascii du 0) + 49 (code ascii du 1)

Exercice 2

Ce code incrémente la variable c jusqu'à ce que sa valeur dépasse sa taille théorique. Alors l'incrément lui donne la valeur 0 (11111111 + 00000001 -> 00000000 en non signé). Les caractères correspondants sont ensuite affichés.

Le processeur aurait pû aussi planter lors de l'appel à la somme créant un overflow.

Pour c<128, le programme nous affiche la liste de certains caractères ASCII avec leurs codes associés.

Exercice 3

En C, une chaine de caractères est typiquement est une suite de caractères terminée par le caractère nul (\0). La chaine de caractères "toto" a donc une taille mémoire de 5. Essayer de l'afficher plantera ou du moins, ne produira probablement pas le résultat demandé, car ce dernier caractère ne sera pas trouvé.

gcc autorise au moins cette construction, même si elle est dangereuse.

Exercice 4

En C, une chaine de caractère a le type char*. C'est donc un pointeur vers une case mémoire de type char (taille 1 octet). Pour lire la chaine, il faut lire les caractères et incrémenter le pointeur (passer à l'octet suivant) jusqu'à tomber sur le caractère nul (\0 correspond à l'octet nul).

Exercice 5

Ce programme est problématique puisque si le pseudo est plus grand que 10 caractères, scanf essaiera d'écrire des octets d'autres variables, pouvant mener a des Segfault ou des attaques par buffer overflow.

Un autre problème est aussi que scanf arrête sa lecture à la lecture du premier espace. Donc si l'utisateur a un espace dans son pseudo, scanf ne récuperera que la premiere partie et récuperera la seconde plus tard, bref c'est la mouise.