Les chaînes de caractères (appelées en anglais strings ), sont des objets importants en programmation, intervenant dans les entrées-sorties et plus généralement dans la manipulation de fichiers textuels.
Une chaîne littérale est une suite de caractères entourée par des apostrophes doubles " (en anglais double quotes ), par exemple "Knuth" ; sa longueur est le nombre de caractères figurant entre les apostrophes, 5 pour "Knuth".
Une chaîne de caractères est représentée en mémoire comme un tableau de
char dont le dernier élément est le caractère nul noté
\0
. On peut utiliser une chaîne littérale pour définir une
variable de type tableau de caractères :
char k[] = "Knuth";
ce qui a pour effet d'allouer un tableau de 6 caractères (un de plus que la longueur de la chaîne), et d'initialiser chacun de ses éléments par :
k[0] = 'K';
k[1] = 'n';
k[2] = 'u';
k[3] = 't';
k[4] = 'h';
k[5] = '\0'
La taille du tableau doit donc être strictement supérieure à la longueur de la chaîne qu'il contiendra. La valeur de chaque caractère peut être ultérieurement modifiée, par exemple par
k[4] = 't';
mais le nom k, n'étant pas une variable, ne peut être l'objet d'une affectation : k = "Donald" est interdit. Il faudra faire appel à une fonction pour copier une chaîne dans une autre.
Les chaînes ont déjà été employées pour réaliser des lectures et des écritures. Les fonctions printf et scanf prennent une chaîne en premier argument.
Une chaîne de caractères (sans espaces) peut être lue sur l'entrée
standard avec la fonction scanf, et écrite sur la sortie
standard avec printf en utilisant l'indicateur de conversion %s
:
char s[4]; /* pour lire au plus 3 caractères */
scanf("%s", s);
printf("%s", s);
Un \0
est ajouté à la fin des caractères lus par scanf.
Il existe de nombreuses fonctions sur les chaînes. Une des plus utiles est sprintf, qui permet de construire (ou plus exactement de remplir) des chaînes, en concaténant d'autres chaînes, qui sont éventuellement le résultat de la conversion d'objets d'autres types, comme pour printf ; son premier argument est la chaîne à remplir, les arguments suivants sont identiques à ceux de printf. Avant de remplir une chaîne avec sprintf, il est indispensable de la définir d'une longueur suffisante. Dans l'exemple qui suit, la chaîne s est formée en concaténant data, 4 et .out :
char s[10];
int n = 4;
char in[5] = "data";
sprintf(s, "%s%d.out", in, n);
Il est souvent commode, si l'on travaille avec des chaînes de taille maximum fixée, de définir un nom de type à l'aide de l'instruction typedef :
typedef char[N] string;
qui peut ensuite être utilisé dans des déclarations de variable :
string s1 = "data";