cuando strlen alguna extraña combinación

el código se muestra a continuación:

char a[] = { 'a','b','c','d','e','f' };
	printf("%d\n", strlen(a));
	printf("%d\n", strlen(a+0));
	//printf("%d\n", strlen(*a));
	//printf("%d\n", strlen(a[1]));
	//printf("%d\n", strlen(&a));
	//printf("%d\n", strlen(&a+1));
	printf("%d\n", strlen(&a[0]+1));

carácter a[] = { 'a','b','c','d','e','f' }

strlen (a)                Dado que no hay \0 en la matriz, strlen seguirá leyendo y leyendo, contando el número de caracteres antes de \0, que es un valor aleatorio

strlen (a+0)            El nombre de la matriz representa la dirección del primer elemento, y +0 sigue siendo la dirección del primer elemento, que es un valor aleatorio 


strlen (*a)                *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una dirección

                              Por lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (a[1])              como el anterior


strlen (&a)              saca la dirección de toda la matriz, bip bip, valor aleatorio          


strlen (&a+1)          saca la dirección de toda la matriz, retrocede hasta la dirección detrás del final de la matriz, bip bip

                                valor aleatorio
strlen (&a[0]+1)        valor aleatorio

Veamos a continuación:

   

    char a[] = "abcdef";
	printf("%d\n", strlen(a));
	printf("%d\n", strlen(a+0));
	//printf("%d\n", strlen(*a));
	//printf("%d\n", strlen(a[1]));
	//printf("%d\n", strlen(&a));
	//printf("%d\n", strlen(&a+1));
	printf("%d\n", strlen(&a[0]+1));

char a[] = "abcdef"

strlen (a)                Dado que hay \0 en la matriz, strlen cuenta el número de caracteres antes de \0, que es 6

strlen (a+0)            El nombre de la matriz indica la dirección del primer elemento, +0 sigue siendo la dirección del primer elemento, que es 6 


strlen (*a)               *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una dirección

                              Por lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (a[1])            como el  anterior


strlen (&a)              saca la dirección de toda la matriz, que es 6


strlen (&a+1)          saca la dirección de toda la matriz, retrocede hasta la dirección detrás del final de la matriz, bip bip

                                El valor aleatorio
strlen (&a[0]+1)        comienza con el segundo elemento, que es 5

    char* p = "abcdef";
	printf("%d\n", strlen(p));
	printf("%d\n", strlen(p+1));
	//printf("%d\n", strlen(*p));
	//printf("%d\n", strlen(p[0]));
	//printf("%d\n", strlen(&p));
	//printf("%d\n", strlen(&p+1));
	printf("%d\n", strlen(&p[0]+1));

car* p = "abcdef"

strlen (p)                strlen cuenta el número de caracteres antes de \0, que es 6

strlen (p+1)            El nombre de la matriz indica la dirección del primer elemento, +1 es la dirección del segundo elemento, que es 5


strlen (*p)               *a es increíble, es el primer elemento de la matriz, es decir, 'a', a los ojos de las variables de puntero, todo es una dirección

                              Por lo tanto, el 97 de 'a' también se considera una dirección, y el acceso directo provocará un error
strlen (p[0])            como el  anterior


strlen (&p)              saca la dirección de la variable de puntero p, strlen sigue leyendo hacia atrás hasta \0, que es un valor aleatorio


strlen (&p+1)          saca la dirección de la variable puntero p, salta la dirección de una variable puntero y continúa leyendo sucesivamente,

                               strlen ha estado leyendo hacia atrás hasta \0, sigue siendo un valor aleatorio
strlen (&p[0]+1)        El segundo elemento comienza, es 5

Supongo que te gusta

Origin blog.csdn.net/m0_63742310/article/details/123596756
Recomendado
Clasificación