[C con Clase] Pregunta

Davidson, Steven srd4121 en njit.edu
Sab Nov 23 01:36:06 CET 2019


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 en 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.
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20191122/a0e4efa3/attachment-0001.html>


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