[C con Clase] acerca del rendimiento de strlen

D1e6o! diegogeid en gmail.com
Mie Mar 14 06:24:58 CET 2007


Hola. sizeof es distinto a strlen.
Mientras que sizeof calcula el tamaño que posee la variable para almacenar
la cadena, strlen calcula el tamaño de la cadena hasta el fin de cadena...
puede que una variable sea:
char cad[50]="hola", por lo que la longitud reservada en la memoria es de 50
bytes (50*sizeof(char)) y el tamaño de la cadena devuelto por strlen será
solo 4 ya que el 5to biyte es el final de cadena. sizeof(cad) es 50,
strlen(cad) es 4.

En tu caso si es lo mismo por ser el largo reservado igual al del largo,
pero no siempre es así y generalmente no lo es.

Mirá el siguiente ejemplo:

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    char cad[50]="hola";
    printf("Tamaño del sizeof: %d, tamaño del strlen: %d",sizeof(cad),
strlen(cad));
    getch();
}

En caso que sean iguales, es más óptimo usar sizeof ya que no es una
instrucción de c sino del preprocesador, por lo que es directo mientras que
strlen busca la posición del final de cadena recorriéndola hasta esa
posición y verficando continuamente si es el final de cadena ('\0')

Saludos!


El día 14/03/07, miguel <rabindranath84 en hotmail.com> escribió:
>
> buenas, resulta que estuve trabajando en java en vacaciones (eso se notó
> bastante cuando volví a abrir este correo esta tarde y me encontré con la
> pequeña cantidad de 637 mensajes de conclase), y esto hizo que olvidara
> algunas cosas de c, por ejemplo la función strlen, pero el caso es que en
> algún momento tuve que crear una cadena a partir de otra, para lo que
> necesitaba la longitud de esta cadena, pues al no recordar esta función
> decidí hacer lo siguiente:
>
> char []pCadena="hola mundo"; //mi antigua cadena
> char *nCadena=new char[sizeof(pCadena)/sizeof(char)];  //mi nueva cadena
>
> pues mi duda es puntualmente:
>
> qué es más optimo: hacer un strlen() o usar el sizeof?
>
> porque entiendo que el strlen hace un ciclo de recorrido (eso lo aprendí
> leyendo una crítica que le hacían a c++, donde decían que otros lenguajes
> usaban un espacio de la cadena al principio para guardar información acerca
> de la misma, como su longitud, y así no tener que hacer un recorrido para
> conseguirla), pero no sé como es que funciona sizeof (aunque creo que
> trabaja con el preprocesador, pero no lo entiendo muy bien).
>
> agradezco cualquier ayuda y aclaración al respecto
> hasta luego
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070314/59a84e83/attachment.html>


Más información sobre la lista de distribución Cconclase