1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| char toto[100];
// Ici je déclare l'existence de toto et je la définis comme une zone de 100 caractères (regarde bien la nuance entre "déclarer" et "définir")
// Tu remarqueras aussi que je n'ai pas dit "chaine". En effet, toto n'est pas une chaine (je n'y ai pas mis de '\0').
// C'est donc simplement un tableau de caractères
for (i=0; i < 10; i++) toto[i]='X';
// Ici, la zone "toto" n'est toujours pas une chaine (j'ai beau y avoir mis 10 caractères 'X', je n'y ai toujours pas mis de '\0')
// Je n'ai donc pas le droit de la faire traiter par aucune fonction de traitement de chaines (strcpy, printf, strlen, etc).
toto[42]='\0';
// Ici, la zone "toto" est maintenant une chaine puisque j'y ai mis un '\0'
// Pourquoi je l'ai mis à la position 42 ? Ben parce que j'en avais 1) le droit (j'ai 100 caractères à ma disposition) et 2) l'envie
// Ceci dit, j'ai rempli les positions de 0 à 9 et la position 42. Je ne sais donc rien des positions de 10 à 41. Mais ça, c'est mon problème.
printf("len=%d\n", strlen(toto));
// Je ne sais absolument pas ce que j'aurai comme résultat puisque je ne sais rien des cases 10 à 41 (peut-ête y a-t-il un '\0' qui y traine).
// Peut-être aurai-je 10 ? Peut-être aurai-je 42 ? Peut-être autre chose ? Mais ça reste ma merde et je ne peux m'en prendre qu'à moi-même.
// La seule chose dont je sois sûr, c'est que le nombre que j'aurai sera obligatoirement compris entre 10 et 42.
toto[42]='X';
// Ici la zone "toto" n'est de nouveau plus une chaine. Mais encore une fois, c'est moi seul que ça regarde
// Tant que je ne demande pas de traitement strXXX(), je suis serein.
toto[10]='\0';
// Ici la zone "toto" est de nouveau redevenue une chaine mais là, en plus, je la maitrise entièrement du début jusqu'à sa fin naturelle.
// Et quoi qu'elle contienne après cette position 10, je m'en bats l'oeuil car toutes les fonctions de traitement de chaines s'arrêteront au premier '\0' trouvé.
printf("len=%d\n", strlen(toto));
// Je sais avec certitude que j'aurai 10
// Et j'aurais écrit dès le départ strcpy(toto, "XXXXXXXXXX") ça aurait été la même chose (strcpy aurait copié la chaine et rajouté le '\0' à la fin) |
Partager