2011-12-21 18 views

Respuesta

21

strlen() se utiliza para obtener la longitud de una matriz de caracteres/cadena.

sizeof() se utiliza para obtener el tamaño real de cualquier tipo de datos en bytes.

Además, sizeof() es una expresión en tiempo de compilación que le da el tamaño de un tipo o tipo de variable. No le importa el valor de la variable.

strlen() es una función que toma un puntero a un carácter y recorre la memoria de este carácter, buscando un carácter NULL. Cuenta el número de caracteres antes de encontrar el carácter NULL. En otras palabras, le da la longitud de una cadena terminada en NULL estilo C.

Los dos son casi diferentes. En C++, tampoco necesita mucho, strlen() es para cadenas estilo C, que debe reemplazarse por C++ - estilo std::strings, mientras que la aplicación principal para sizeof() en C es como argumento para funciones como malloc(), memcpy() o memset(), todo lo cual no debe usar en C++ (use new, std::copy() y std::fill() o constructors).

+1

+1, pero incluso usando 'std :: copy' y' std :: fill' debe proporcionar el número de elementos de la matriz si está utilizando matrices de estilo C. El punto no es mucho 'memcpy' /' memset' vs algoritmos STL, sino C-arrays/cadenas vs 'std :: vector' /' std :: array'/'std :: string'/otros contenedores. –

+2

"sizeof es una expresión en tiempo de compilación", excepto cuando se usa en un VLA en C99. –

+1

Solo una nit, pero ... hay un puntero 'NULL' y un" puntero nulo ", pero es un caracter nulo (o lo que prefiero: un caracter' '\ 0''). –

9

sizeof no es un método . Es una construcción en tiempo de compilación que determina la cantidad de memoria que ocupa un tipo particular o una variable. strlen, por otro lado, es una función que cuenta el número de valores char consecutivos que no son cero comenzando en la ubicación especificada en la memoria (que pasa a ser lo mismo que determinar la longitud de una cadena C terminada en cero).