[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