comprendre la fonction de strlen en C

Je suis en train d’apprendre C. Et, je vois cette fonction trouver la longueur d’une chaîne.

size_t strlen(const char *str) { size_t len = 0U; while(*(str++)) ++len; return len; } 

Maintenant, quand la boucle se termine-t-elle? Je suis confus, puisque str ++, augmente toujours le pointeur.

  1. Les chaînes de caractères C sont terminées par le caractère NUL qui NUL 0
  2. 0 est false en C et toute autre chose est true .

Nous continuons donc d’incrémenter le pointeur dans la chaîne et la longueur jusqu’à ce que nous trouvions un NUL , puis que nous NUL .

 while(*(str++)) ++len; 

est identique à:

 while(*str) { ++len; ++str; } 

est identique à:

 while(*str != '\0') { ++len; ++str; } 

Ainsi, vous voyez maintenant que str pointe vers le caractère null à la fin de la chaîne, la condition de test échoue et vous arrêtez de mettre en boucle.

Vous devez comprendre deux notions pour saisir l’idée de la fonction:

1 °) AC chaîne est un tableau de caractères.

2 °) En C, une variable tableau est en fait un pointeur sur la première casse de la table.

Alors, que fait strlen? Il utilise l’arithmétique de pointeur pour parsingr la table (++ sur un pointeur signifie: cas suivant), jusqu’à atteindre le signal de fin (“\ 0”).

Une fois que *(str++) renvoie 0, la boucle se termine. Cela se produira lorsque str le dernier caractère de la chaîne (car les chaînes en C sont terminées par 0).

Correct, str++ augmente le compteur et renvoie la valeur précédente. L’astérisque ( * ) supprime le pointeur, c’est-à-dire qu’il vous donne la valeur du caractère.

Les chaînes C se terminent par un octet nul. La boucle while se ferme lorsque la condition n’est plus vraie, ce qui signifie quand elle est nulle.

Ainsi, la boucle while s’exécute jusqu’à rencontrer un octet nul dans la chaîne.