29 lines
1.8 KiB
Markdown
29 lines
1.8 KiB
Markdown
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.
|