[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