Diferencia entre strlen() y sizeof() para string en C

tamaño de()

El operador Sizeof es un operador unario de tiempo de compilación que se puede usar para calcular el tamaño de su operando.

  • El resultado de sizeof es de tipo integral sin signo, que generalmente se denota por size_t.
  • sizeof se puede aplicar a cualquier tipo de datos, incluidos tipos primitivos como tipos enteros y de punto flotante, tipos de puntero o tipos de datos compuestos como estructura, unión, etc.

strlen()

strlen() es una función predefinida en C cuya definición está contenida en el archivo de cabecera “string.h”.

  • strlen() acepta un puntero a una array como argumento y recorre la memoria en tiempo de ejecución desde la dirección que le damos en busca de un carácter NULL y cuenta cuántas ubicaciones de memoria pasó antes de encontrar una.
  • La tarea principal de strlen() es contar la longitud de una array o string.
  • tamaño de vs strlen()

  1. Tipo: el operador Sizeof es un operador unario mientras que strlen() es una función predefinida en C
  2. Tipos de datos admitidos: Sizeof proporciona el tamaño real de cualquier tipo de datos (asignados) en bytes (incluidos los valores nulos), mientras que obtiene la longitud de una array de caracteres/string.
  3. Tamaño de evaluación: sizeof() es una expresión en tiempo de compilación que le da el tamaño de un tipo o el tipo de una variable. No le importa el valor de la variable.
    Strlen, por otro lado, le da la longitud de una string terminada en NULL de estilo C.
  4. Resumen: Los dos son conceptos casi diferentes y se utilizan para diferentes propósitos.
  5. En contexto de C++: En C++, no necesita ninguno de ellos como tal.
    strlen() en strings de estilo C se puede reemplazar por C++ std::strings .
    sizeof() en C es un argumento para funciones como malloc(), memcpy() o memset() que se pueden reemplazar por C++ (use new, std::copy() y std::fill() o constructores) .
// C program to demonstrate difference 
// between strlen() and sizeof()
#include<stdio.h>
#include<string.h>
  
int main()
{
    char str[] = "November";
    printf("Length of String is %lu\n", strlen(str));
    printf("Size of String is %lu\n", sizeof(str));
}

Producción:

Length of String is 8
Size of String is 9

Dado que el tamaño de char en C es de 1 byte, también encontramos que strlen() dio un valor menos que sizeof().

Explicación: Sabemos que cada string termina con un carácter NULL («\0»).
strlen() busca ese carácter NULL y cuenta la cantidad de direcciones de memoria pasadas, por lo que en realidad cuenta la cantidad de elementos presentes en la string antes del carácter NULL, aquí, que es 8. El operador
sizeof() devuelve la cantidad real de memoria asignada para el operando le pasó. Aquí, el operando es una array de caracteres que contiene 9 caracteres, incluido el carácter nulo, y el tamaño de 1 carácter es 1 byte. Entonces, aquí el tamaño total es de 9 bytes.
Intenta adivinar la salida del siguiente programa:

#include <iostream>
#include <string.h>
using namespace std;
  
int main()
{
        char a[] = {"Geeks for"};
        char b[] = {'G','e','e','k','s',' ','f','o','r'};
        cout << "sizeof(a) = " << sizeof(a);
        cout << "\nstrlen(a) = "<< strlen(a);
        cout<<  "\nsizeof(b) = " << sizeof(b);
        cout<<  "\nstrlen(b) = " << strlen(b);
          
        return 0;
}

La función strlen busca un carácter nulo y se comporta de manera anormal si no lo encuentra.
Producción:

sizeof(a) = 10
strlen(a) = 9
sizeof(b) = 9
strlen(b) = 11

Este artículo es una contribución de Aditya Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *