Hilo
En el siguiente programa C++
¿por qué no me da la misma longitud en ambas variables que se suponen
idénticas?
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main()
{
char palabra[] = "Clemente";
char palabra2[] = {'C','l','e','m','e','n','t','e'};
int longitud = 0, longitud2 = 0;
longitud = strlen(palabra);
longitud2 = strlen(palabra2);
cout << palabra<<endl;
cout<<longitud<<endl;
cout << palabra2<<endl;
cout<<longitud2<<endl;
getch();
return 0;
}
char palabra me da 8 que es correcto
char palabra2 me da 11, aventando basura en los tres ultimos caracteres.
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

Re: Pregunta(Steven Davidson) 2019-11-23 00:36:18
Hola Hermilo,
Esto es por que los dos arrays no son idénticos ni tampoco el contenido de
cada uno. Puede mirar el tamaño de cada array de esta manera,
cout << sizeof palabra << endl;
cout << sizeof palabra2 << endl;
Debería aparecer en pantalla:
9
8
La razón es que la cadena "Clemente" guarda implícitamente el carácter nulo
al final, justo después del carácter 'e'. El contenido de 'palabra2'
contiene los ocho caracteres inicializados sin guardar ningún carácter
nulo. Para que los contenidos sean iguales, debería agregar el carácter
nulo explícitamente a la inicialización de 'palabra2'; esto es,
char palabra2[] = { 'C', 'l', 'e', 'm', 'e', 'n', 't', 'e', '\0' };
Tenga presente que la función estándar, 'strlen()', meramente contabiliza
los caracteres hasta llegar al primer carácter nulo, que es cuando se
detiene. En el caso de 'palabra2', no hay un carácter nulo establecido, por
lo que puede continuar sin interrupción hasta que se encuentre un valor
cero, que se interpreta como el carácter nulo y se detendrá.
Espero que esto aclare la duda.
Steven
On Fri, Nov 22, 2019 at 7:10 PM Ing Hermilo Alvarez <hgalvarezm@gmail.com>
wrote:
> En el siguiente programa C++
> ¿por qué no me da la misma longitud en ambas variables que se suponen
> idénticas?
>
> #include<iostream>
> #include<conio.h>
> #include<string.h>
>
> using namespace std;
>
> int main()
> {
> char palabra[] = "Clemente";
> char palabra2[] = {'C','l','e','m','e','n','t','e'};
> int longitud = 0, longitud2 = 0;
>
> longitud = strlen(palabra);
> longitud2 = strlen(palabra2);
>
> cout << palabra<<endl;
> cout<<longitud<<endl;
>
> cout << palabra2<<endl;
> cout<<longitud2<<endl;
>
>
> getch();
> return 0;
> }
>
> char palabra me da 8 que es correcto
> char palabra2 me da 11, aventando basura en los tres ultimos caracteres.
>
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

Re: Pregunta(Facu) 2019-11-23 00:44:42
Aclarar también que siempre debes introducir un carácter nulo. En este caso
estarías introduciendo una vulnerabilidad a tu programa, y podría crashear.
Ya que estas accediendo a una sección de memoria más allá del array, y no
sabes lo que hay ahí. De todas formas entiendo que eso fue solo para probar
y entender como funciona el lenguaje, lo cual es muy bueno. Sigue así! :D
El vie., 22 de noviembre de 2019 21:38, Davidson, Steven <srd4121@njit.edu>
escribió:
> Hola Hermilo,
>
> Esto es por que los dos arrays no son idénticos ni tampoco el contenido de
> cada uno. Puede mirar el tamaño de cada array de esta manera,
>
> cout << sizeof palabra << endl;
> cout << sizeof palabra2 << endl;
>
> Debería aparecer en pantalla:
>
> 9
> 8
>
> La razón es que la cadena "Clemente" guarda implícitamente el carácter
> nulo al final, justo después del carácter 'e'. El contenido de 'palabra2'
> contiene los ocho caracteres inicializados sin guardar ningún carácter
> nulo. Para que los contenidos sean iguales, debería agregar el carácter
> nulo explícitamente a la inicialización de 'palabra2'; esto es,
>
> char palabra2[] = { 'C', 'l', 'e', 'm', 'e', 'n', 't', 'e', '\0' };
>
> Tenga presente que la función estándar, 'strlen()', meramente contabiliza
> los caracteres hasta llegar al primer carácter nulo, que es cuando se
> detiene. En el caso de 'palabra2', no hay un carácter nulo establecido, por
> lo que puede continuar sin interrupción hasta que se encuentre un valor
> cero, que se interpreta como el carácter nulo y se detendrá.
>
>
> Espero que esto aclare la duda.
>
> Steven
>
>
> On Fri, Nov 22, 2019 at 7:10 PM Ing Hermilo Alvarez <hgalvarezm@gmail.com>
> wrote:
>
>> En el siguiente programa C++
>> ¿por qué no me da la misma longitud en ambas variables que se suponen
>> idénticas?
>>
>> #include<iostream>
>> #include<conio.h>
>> #include<string.h>
>>
>> using namespace std;
>>
>> int main()
>> {
>> char palabra[] = "Clemente";
>> char palabra2[] = {'C','l','e','m','e','n','t','e'};
>> int longitud = 0, longitud2 = 0;
>>
>> longitud = strlen(palabra);
>> longitud2 = strlen(palabra2);
>>
>> cout << palabra<<endl;
>> cout<<longitud<<endl;
>>
>> cout << palabra2<<endl;
>> cout<<longitud2<<endl;
>>
>>
>> getch();
>> return 0;
>> }
>>
>> char palabra me da 8 que es correcto
>> char palabra2 me da 11, aventando basura en los tres ultimos caracteres.
>>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase@listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

Re: Pregunta(Hermilo Guadalupe Alvarez Miranda) 2019-11-23 01:05:40
El pasado 2019-11-23 00:36:18, Steven Davidson escribió:
Hola Steven
No 1) Gracias por contestar tan rápido.
No 2) Funcionó de maravilla tu recomendación.
No 3) Lo curioso del caso es que si la palabra es distinta a Clemente si me da lo mismo en las dos variables, quiero decir, que si la palabra tiene mas de 8 o menos de 8 si responde que las longitudes son iguales así como está originalmente mi programa. Obviamente que con la corrección que me indicas, ya me dá longitudes iguales a pesar de que la palabra sea Clemente.
Gracias nuevamente y por aquí estaré molestando mas adelante.
_______________________________________________
Lista de correo Cconclase Cconclase@listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ