[C con Clase] Mas cadenas...

Joaquin Fernandez joaquinfq en gmail.com
Sab Nov 25 04:05:47 CET 2006


Hola Yudenis

>     char arre[3]="123"; 
> 
>  
> 
> el compilador me devuelve este aviso:
> 
> initializer-string for array of chars is too long

Hay algo "matemático" que tienes que hacer cada vez que declaras un array de char donde vas a
almacenar una cadena de texto:

char a[LongitudCadena + 1] = "123"

Siempre debes sumar uno a la longitud máxima que esperas almacenar. Esto es para ubicar el '\0' o
carácter nulo al final. En tu caso vas a almacenar 3 caracteres: '1', '2' y '3', así que escribes:

char a[3 + 1] = "123"

Al usar comillas, ésto es equivalente a escribir:

char a[4] = { '1', '2', '3', '\0' }

Si no vas a modificar la cadena en el programa puedes hacer que el compilador haga ese trabajo por
ti escribiendo:

char a[] = "123";

o

char a[] = { '1', '2', '3', '\0' }

Así el compilador cuenta los caracteres entre las comillas y asigna el espacio necesario por ti y te
evitas los errores.

También hay dos errores comunes entre los principiantes del C/C++ cuando usan arreglos en general:

1) Si el arreglo tiene 4 miembros los enumeran: a[1], a[2], a[3] y a[4] cuando en realidad es: a[0],
a[1], a[2] y a[3].

2) Cuando empiezan en C/C++ se dice que índices de los arreglos van de 0 hasta n-1, así que al
declarar los arreglos los declaran como a[n-1] (como has hecho tú) cuando allí debe ir a[n] aunque
vayas a acceder al n-ésimo elemento por medio de a[n-1]. Es decir, no confundir el valor entre []
cuando se declara y cuando se accede a los miembros del arreglo.

Espero te sea útil mi comentario.

Saludos

Joaquín




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