[C con Clase] Cadenas (2)

Steven R. Davidson vze266ft en verizon.net
Vie Nov 24 10:18:24 CET 2006


Hola Abel,

Ringo wrote:

> Hola a todos,
> hace rato les escribí preguntandoles algo sobre cadenas. No entendía 
> porqué la siguiente declaración no me funciona:
>  
> int main(int argc, char *argv[])
> {
>    char *a[4];
>    for(int i=0;i<=3;i++){cout<<"Nombre "<<i<<" : ";cin>>a[i];cout<<endl;}
>   
>    for(int i=0;i<=3;i++){cout<<a[i]<<endl;}
>   
>    system("PAUSE"); 
>    return 0;
> }
>  
> lo que hice ahora es lo siguiente:
> ............
>    char (*a)[4];
>    for(int i=0;i<=3;i++){cout<<"Nombre"<<i<<" : ";cin>>a[i];cout<<endl;}
>    ......
>  
> y tampoco funciona; le aumenté una variable y recien funciona:
>  
> char (*a)[4],b[5];
>    for(int i=0;i<=3;i++){cout<<"Nombre "<<i<<" : ";cin>>a[i];cout<<endl;}
>  
> alguien podría explicarme qué esta pasando en todo esto?

Ahora has creado un puntero a un array de 4 'char'. Nuevamente, no has 
inicializado tal puntero, por lo que contiene "basura" y por tanto 
apuntará a "basura" en memoria.

Si el segundo caso te funciona, solamente es por azar. Es posible que 
hayas tenido la suerte de que 'a' contenga una dirección de memoria 
válida en el momento de ejecutar tu programa. Te aseguro que si lo 
ejecutas otra vez o incluso en otra máquina, no obtendrás el mismo 
funcionamiento aparentemente correcto del primer caso.

El quid del tema es el mismo que en el caso anterior: debes tener 
memoria para guardar valores. O bien dejas al compilador crear la 
memoria al usar arrays estáticos, o bien creas la memoria tú mismo al 
crear arrays dinámicos.


Espero que vayamos aclarando el tema.

Steven








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