ANNEXE : Types caractère et chaine du langage C

1. Les caractères

Le type char correspond à un entier relatif compris entre -128 et +127 (codage sur 8 bit) et peut donc utiliser les opérateurs sur les entiers, mais seules les valeurs positives sont concrètement utilisées pour représenter les caractères ASCII. Il est possible d'utiliser le type char comme un type entier relatif codé sur un octet (ou son pendant unsigned char pour des valeurs comprises entre 0 et 255).
N.B. La fin d'un fichier Unix est représentée par un caractère négatif dont la valeur n'est pas standardisée (généralement −1).

Il existe un codage spécial pour représenter des caractères de code ASCII inférieur à 32 :
Codage  MnémoniqueASCII
'\0'Nill 0
'\a'Bell 7
'\b'Back 8
'\t'Tabulation 9
'\n'Line Feed 10
'\v'Vertical tab. 11
'\f'Form Feed 12
'\r'Carriage Return 13
'\e'Escape 27
Pour tester le comportement de ce codage sur une machine donnée :  for (char c=0;c<32;c++) printf("char=%c/ASCII=%d\n",c,c);

1. Les chaines de caractères

Une chaine de caractères correspond de manière équivalente :
– à un pointeur sur le premier élément de la chaine,
– à un tableau de n+1 éléments si la chaine contient n caractères (le dernier élément est le caractère '\0' indicateur de fin de chaine).

Les chaines sont à la base des chaines de caractères ASCII (pour les chaines de non-ascii (dont UTF-8) on peut utiliser la bibliothèque wchar).

Quelques fonctions de la bibliothèque string :
rôle nom paramètres1 retour
longueur strlen char* s non vide (s!=NULL) la taille de s
comparaison lexicographique strcmp char* s, char* t non vides un entier : 0 si les chaines sont identiques, <0 si s est avant t, >0 sinon
idem mais pour au plus n caractères strncmp char* s, char* t, entier2 n idem
recopie le contenu de src vers dest3 strcpy char* dest, char* src char* dest
idem mais pour au plus n caractères strncpy char* dest, char* src, entier2 n char* dest
concatène src à la fin de dest strcat char* dest, char* src char* dest
idem mais pour au plus n caractères strncat char* dest, char* src, entier2 n char* dest
pointeur4 sur la première occurrence de k dans s
pour au plus les n premiers éléments de s
memchr char* s, int k, entier2 n char*
1 Les paramètres modifiés par effet de bord sont en couleur.
2 cet entier est du même type que les valeurs retournées par la fonction sizeof.
3 La chaine dest doit avoir une taille supérieure (ou égale) à src.
4 Ce pointeur est en fait de type void* et la valeur fournie pour le caractère est de type int, ce qui généralise la fonction.

N.B. Ces fonctions sont souvent optimisées à un bas niveau, avec une bonne vitesse d'exécution mais un faible contrôle (attention aux Segmentation fault). On peut programmer des versions de plus haut niveau qui, si elle seront moins rapides, pourront être mieux contrôlées.