comment strlen compte unicode en c

Je suis curieux de savoir comment strlen compte les caractères Unicode de plusieurs octets en C.

Compte-t-il chaque octet ou caractère (car ils peuvent comporter plusieurs octets) jusqu’au premier ‘\ 0’?

strlen() compte le nombre d’octets jusqu’à ce qu’un \0 soit rencontré. Cela est vrai pour toutes les chaînes.

Pour Unicode, notez que la valeur de retour de strlen() peut être affectée par le possible octet \0 existant dans un caractère valide autre que le terminateur null. Si vous utilisez UTF-8, c’est bon, car aucun caractère valide autre que ASCII 0 ne peut avoir un octet \0 , mais peut ne pas être vrai pour d’autres codages.

strlen ne s’applique qu’aux chaînes, c’est-à-dire aux tableaux de caractères à terminaison nulle. Tous les encodages multi-octets autorisés dans les chaînes ont la propriété de ne contenir aucun octet null interne. Par conséquent, strlen et d’autres fonctions str , telles que strcat fonctionnent strcat .

Si par “unicode” vous voulez dire des tableaux de wchar_t cela peut contenir des octets nuls, mais là encore, ce n’est pas un problème, aucun des éléments wchar_t lui-même ne sera nul. Et vous ne devriez pas appliquer les fonctions str à de tels tableaux, elles ne sont pas définies pour elles.