Test Foro de elhacker.net SMF 2.1

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

typedef struct{
    int x,y;
    char name[10];
}Opcion;

void opciones()
{
    int i;
    Opcion opc[3];
    opc[0].name="JUGAR";
    opc[1].name="RECORDS\0";
    opc[2].name="AYUDA\0";
    opc[3].name="SALIR\0";
    for(i=1;i<=4;i++)
    {
        opc[i-1].x=10;
        opc[i-1].y=i*100;
        rectangle(opc[i-1].x,opc[i-1].y,opc[i-1].x+30,textwidth(opc[i-1].name));
    }
}

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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
Opcion opc[3];

Luego no puedes salir haciendo esto  :silbar::

Código (cpp) [Seleccionar]
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.

char name[10];

por

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.