Directorio de artículos
1.tamaño de
(1) Si desea encontrar el tamaño del espacio ocupado por la cadena, incluido el '\ 0' predeterminado al final de la cadena.
(2) Si lo que busca no es el tamaño de una cadena, lo que busca es el tamaño de una matriz, tipo, etc., sin considerar '\ 0', porque no es una cadena, hay sin '\ 0' predeterminado al final.
(3) Si obviamente aparece '\ 0', cuéntelo.
(4) Devuelve el tamaño de una variable o tipo (en bytes)
2.strlen
Encuentre el tamaño del contenido de la cadena, cuente el número de caracteres en la cadena, deje de contar cuando encuentre '\ 0' y no cuente '\ 0'.
3. Puntos de conocimiento
3.1 Para matrices
sizeof: el resultado es el tamaño de la matriz.
strlen: Se recorrerá toda la matriz durante el cálculo y es posible que no se encuentre '\ 0' cuando se recorra más tarde. Habrá un problema fuera de límites. El programa se bloqueará o se generarán valores aleatorios el resultado debe tener al menos la longitud de la matriz.
3.1.1 No hay '\ 0' en la matriz
#include <stdio.h>
int main()
{
char s[] = {
'a', 'b', 'c' };
printf("%d\n", sizeof(s));
printf("%d\n", strlen(s));//随机值
return 0;
}
3.1.2 La matriz tiene '\ 0'
(1) '\ 0' está al final
#include <stdio.h>
int main()
{
char s[] = {
'a', 'b', 'c', '\0' };
printf("%d\n", sizeof(s));
printf("%d\n", strlen(s));
return 0;
}
(2) '\ 0' está en el medio
#include <stdio.h>
int main()
{
char s[] = {
'a', 'b','\0','c', };
printf("%d\n", sizeof(s));
printf("%d\n", strlen(s));
return 0;
}
3.2 Para cuerdas
3.2.1 La cadena no tiene un '\ 0' obvio
#include <stdio.h>
int main()
{
printf("%d\n", sizeof("abcd"));
printf("%d\n", strlen("abcd"));
return 0;
}
3.2.2 La cadena tiene un '\ 0' obvio
(1) '\ 0' está al final
#include <stdio.h>
int main()
{
printf("%d\n", sizeof("abd\0"));
printf("%d\n", strlen("abd\0"));
return 0;
}
(2) '\ 0' está en el medio
#include <stdio.h>
int main()
{
printf("%d\n", sizeof("abc\0d"));
printf("%d\n", strlen("ab\0d"));
return 0;
}