[C con Clase] acerca del rendimiento de strlen

miguel rabindranath84 en hotmail.com
Jue Mar 15 03:14:10 CET 2007


Buenas

pues muchas gracias por sus respuestas

en cuanto a lo dicho por D1e6o!:

D>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.
D>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. 

pues gracias por la aclaración, tal vez me faltó decirlo, pero soy consciente de ello, en realidad estoy hablando de este ejemplo específico, ya que, como tú aclaras, en otro caso sería diferente el resultado obtenido.

por lo comentado por Steven:

S>
 void func( char cad[] ){
   cout << "[cad] = " << sizeof cad << "\tstrlen(cad) = " << strlen(cad) <<  endl;
 }
 int main(){
   char szCadena[] = "una cadena";
   func( szCadena );
   return 0;
 }

S>Aparecerá en pantalla:
 [cad] = 4       strlen(cad) = 10 

si, tienes razón, pero mi idea no es hacerlo con una función diferente (porque creo que ahí si pasa el parámetro en forma de apuntador), sino en la misma función y después de creada la cadena, si haces un ejemplo verás que (aunque el resultado no es exactamente el mismo que con strlen, ya que, por lo que veo parece que cuenta también el caracter nulo) se obtiene un resultado diferente al que has expuesto, por ejemplo:

int main(){
  char szCadena[] = "una cadena"; 
  cout<<sizeof (szCadena)/sizeof(char);
  return 0;
}

el resultado será 11 y no 4 como el que resulta al usar el ejemplo expuesto por tí (que por cierto también resulta si creamos la cadena como char *szCadena = "una cadena";)

en cuanto a lo otro que respondiste:

S>Pues sí; parece que has estado enfocado más con Java que con C++ :)  Lo anterior, bajo C/C++, es incorrecto. Debería ser:
char pCadena[] = "hola mundo"; 

me gustaría saber el por qué, ya que no entiendo muy bien por qué está mal definido (o por lo menos no óptimamente definido), aunque creando algunos ejemplos creo que el error se genera al crear varias variables de la forma en que yo lo estaba haciendo, algo como
char []a="hola", b='a';
genera un error de compilación, pero me gustaría (si es posible) una explicación acerca de esto.

Por cierto, aunque me salgo algo del tema, gracias Steven por la info acerca de blender (no quise abrir otro post solo de agradecimiento, ya que podría considerarse spam), en realidad me ha servido (parece que aún no me expreso muy bien frente a google, pero intentaré mejorar), estoy leyendo con gran entusiasmo el tema, nuevamente gracias.

hasta luego, buena noche


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