Comprendre la différence entre les résultats strlen() et sizeof() pour l'initialisation de chaîne
En programmation C, il y a souvent une différence entre les résultats de strlen() et sizeof() lorsqu'il s'agit de pointeurs et de tableaux initialisés en chaînes. Ce comportement apparemment contradictoire peut s'expliquer en comprenant la nature des pointeurs et des tableaux.
Considérez l'exemple de code fourni :
<code class="c">char *str1 = "Sanjeev"; char str2[] = "Sanjeev"; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
Le résultat de ce code est :
7 4 7 8
Les différents résultats pour strlen() et sizeof() proviennent du fait que str1 est un pointeur vers une chaîne tandis que str2 est un tableau de caractères.
Sizeof() vs Strlen( ) pour les pointeurs
sizeof() détermine la taille du type de données en octets. Dans le cas d'un pointeur char, tel que str1, sizeof renvoie 4 sur un système 32 bits (8 sur un système 64 bits) car un pointeur occupe 4 (ou 8) octets de mémoire. Cependant, strlen renvoie la longueur de la chaîne pointée par le pointeur de caractère. Puisque la chaîne "Sanjeev" comporte 7 caractères, strlen renvoie 7.
Sizeof() vs Strlen() pour les tableaux
En revanche, str2 est un tableau de personnages. sizeof(str2) renvoie la taille de l'ensemble du tableau, qui inclut à la fois les caractères et le terminateur nul (ajouté automatiquement à toutes les chaînes C). Par conséquent, sizeof(str2) renvoie 8 (le nombre de caractères dans "Sanjeev" plus le terminateur nul). strlen(str2) renvoie également 7, qui est la longueur de la chaîne à l'exclusion du terminateur nul.
Considérations supplémentaires
Pour illustrer davantage la différence, considérez ce qui suit code :
<code class="c">char str2[8]; strncpy(str2, "Sanjeev", 7); char *str1 = str2; printf("%d %d\n", strlen(str1), sizeof(str1)); printf("%d %d\n", strlen(str2), sizeof(str2));</code>
Dans ce cas, str1 est désormais un pointeur qui pointe vers le début du tableau de caractères str2. Comme auparavant, strlen(str1) renvoie 7 et sizeof(str1) renvoie 4. Cependant, strlen(str2) renvoie également 7, tandis que sizeof(str2) renvoie toujours 8. En effet, str2 reste un tableau et la taille d'un tableau est déterminé par le nombre d'éléments qu'il contient, qu'ils soient réellement utilisés ou non.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!