Qu’est-ce qui caractérise un langage de haut niveau ? On peut dire que celui-ci doit au moins gérer les chaînes de caractères facilement et sans aucun risque. BASIC le faisait il y a soixante ans. N’importe quel langage courant le fait actuellement. Pourtant, le précédent article a démont(r)é [1] que le C n’en fait pas partie, surtout à cause des fonctions printf(3) et assimilées : elles procurent une illusion d’aisance qui s’effondre vite et c’est un vrai nid à failles. Nous avons suggéré quelques solutions que nous allons mettre en œuvre ici, grâce notamment au format des chaînes alignées [2] étendu avec des attributs, d’où le nom aStrA. Cela demande un peu de bricolage pour les réaliser en C, mais c’est un premier pas en avant, une base qui ne demande qu’à évoluer.
Une des particularités notables du C est qu’il refuse de reconnaître une chaîne de caractères comme un « objet » en tant que tel. Le compilateur essaie de donner un coup de main() en cachette, mais la définition reste juste « un tableau d’octets », ou bien « un pointeur », selon la perspective, ce qui rappelle la dualité onde-corpuscule de la mécanique quantique. Et tant que l’on n’a pas mesuré (ou compté les octets non nuls), on ne peut pas en effondrer la fonction d’onde.
1. Les chaînes de caractères
Cette ambivalence rend fastidieuse la manipulation des chaînes ASCIIZ, et encourage indirectement à les concaténer avec les fonctions vulnérables de la famille printf(). Mais ces dernières ne sont que la partie émergée de l’iceberg : elles sont les conséquences qui obligent à réfléchir à toutes les causes. L’article à ce sujet [1] les a décortiquées…
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première