Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SkaTrumpet en 12 Mayo 2016, 02:07 am



Título: Error:Estructura con strings
Publicado por: SkaTrumpet en 12 Mayo 2016, 02:07 am
Hola Este es parte de mi codigo y de verdad no se como arreglar el problema
Código
  1. typedef struct{
  2.    int x,y;
  3.    char name[10];
  4. }Opcion;
  5.  
  6. void opciones()
  7. {
  8.    int i;
  9.    Opcion opc[3];
  10.    opc[0].name="JUGAR";
  11.    opc[1].name="RECORDS\0";
  12.    opc[2].name="AYUDA\0";
  13.    opc[3].name="SALIR\0";
  14.    for(i=1;i<=4;i++)
  15.    {
  16.        opc[i-1].x=10;
  17.        opc[i-1].y=i*100;
  18.        rectangle(opc[i-1].x,opc[i-1].y,opc[i-1].x+30,textwidth(opc[i-1].name));
  19.    }
  20. }
  21.  
Y obtenego estos errores:
error: incompatible types in assignment of 'const char [6]' to 'char [10]'


Título: Re: Error:Estructura con strings
Publicado por: ThunderCls en 12 Mayo 2016, 03:39 am
Tienes varios errores de sintaxis y de conceptos. Primero esto:

Código
  1. opc[0].name="JUGAR";

No es valido, no puedes asignar una cadena a un array de chars de esa forma (Solo se puede hacer en la misma linea de declaración del mismo), seria asi

Código
  1. char name[10] = "JUGAR";

Si lo deseas en forma de asignación pues debes asignar cada caracter por separado en la posición que deseas, o usar una de las funciones de copiado de cadenas de la familia strcpy, etc, por ejemplo:

Código
  1. strcpy_s(opc[0].name, "JUGAR");

Finalmente tiene un error de concepto cuando creas el array de estructuras "Opcion". Si dices que creas un array de 3 estructuras:

Código
  1. Opcion opc[3];

Luego no puedes salir haciendo esto  :silbar::

Código
  1. opc[3].name="SALIR\0";

Los arrays siempre son zero indexed, si necesitas mas info puedes darle una lectura a esto
http://programmers.stackexchange.com/questions/110804/why-are-zero-based-arrays-the-norm

Saludos


Título: Re: Error:Estructura con strings
Publicado por: AlbertoBSD en 12 Mayo 2016, 14:52 pm
Otra opcion es cambiar.

Código
  1. char name[10];

por

Código
  1. char *name;

asi no usariamos 2 veces memoria para la misma cadena. El apuntado simplemente tendria la direccion de la cadena estatica.

Ahora que si esa estructura se va a guardar en archivo entonces no seria util. Y tendrias que usar las recomendaciones de Tunder.