Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jonniemaxxx en 24 Mayo 2014, 03:52 am



Título: Conversion de String Constante a Char*
Publicado por: jonniemaxxx en 24 Mayo 2014, 03:52 am
Hola, ando haciendo un programa para mis clases de Programacion basica, lo he terminado pero no entiendo porque me bota un warning en esta funcion

Código
  1. char* Item_Name(int Item){
  2.    char* ItemName[10];
  3.    ItemName[0] = "Producto 1";
  4.    ItemName[1] = "Producto 2";
  5.    ItemName[2] = "Producto 3";
  6.    ItemName[3] = "Producto 4";
  7.    ItemName[4] = "Producto 5";
  8.    ItemName[5] = "Producto 6";
  9.    ItemName[6] = "Producto 7";
  10.    ItemName[7] = "Producto 8";
  11.    ItemName[8] = "Producto 9";
  12.    ItemName[9] = "Producto 10";
  13.    //Retorna el Nombre del Producto Item
  14.    return ItemName[Item-1];
  15. };

Les agradeceria su Colaboracion aunque el programa funcione quiero quitarle ese warning :3 utilizo Code Blocks


Título: Re: Conversion de String Constante a Char*
Publicado por: x64core en 24 Mayo 2014, 04:05 am
Hola, ando haciendo un programa para mis clases de Programacion basica, lo he terminado pero no entiendo porque me bota un warning en esta funcion

Código
  1. char* Item_Name(int Item){
  2.    char* ItemName[10];
  3.    ItemName[0] = "Producto 1";
  4.    ItemName[1] = "Producto 2";
  5.    ItemName[2] = "Producto 3";
  6.    ItemName[3] = "Producto 4";
  7.    ItemName[4] = "Producto 5";
  8.    ItemName[5] = "Producto 6";
  9.    ItemName[6] = "Producto 7";
  10.    ItemName[7] = "Producto 8";
  11.    ItemName[8] = "Producto 9";
  12.    ItemName[9] = "Producto 10";
  13.    //Retorna el Nombre del Producto Item
  14.    return ItemName[Item-1];
  15. };

Les agradeceria su Colaboracion aunque el programa funcione quiero quitarle ese warning :3 utilizo Code Blocks
¿En que linea exactamente? En la asinación de los punteros? o en el retorno?
de todas maneras simplemente hacer un casting o hacer la declaracion de la variable como constante aunque esa manera de obtener el puntero
no me gusta porqué no crear un array de punteros global?


Título: Re: Conversion de String Constante a Char*
Publicado por: jonniemaxxx en 24 Mayo 2014, 04:27 am
o sea de la linea 3 a la linea 12 hahaha como lo harias tu ? ando algo perdido y si en la asignacion


Título: Re: Conversion de String Constante a Char*
Publicado por: x64core en 24 Mayo 2014, 05:06 am
o sea de la linea 3 a la linea 12 hahaha como lo harias tu ? ando algo perdido y si en la asignacion
Simplemente crear el array:
Código:
const char* ItemName[] = {
"Producto 1",
"Producto 2",
"Producto 3",
"Producto 4",
"Producto 5",
"Producto 6",
"Producto 7",
"Producto 8",
"Producto 9",
"Producto 10"
};

char* Item_Name(int Item){
   // validate it
   if(Item <= sizeof(ItemName) / sizeof(ItemName[0]))
   {
    return ItemName[Item-1];
   }
   return NULL;
};


Título: Re: Conversion de String Constante a Char*
Publicado por: rir3760 en 24 Mayo 2014, 16:08 pm
no entiendo porque me bota un warning en esta funcion
Código
  1. char* Item_Name(int Item)
  2. {
  3.    char* ItemName[10];
  4.  
  5.    ItemName[0] = "Producto 1";
  6.    ItemName[1] = "Producto 2";
  7.  
  8.    // ...
  9.  
  10.    return ItemName[Item-1];
  11. };
Se presenta el mensaje de advertencia porque en C++ una cadena literal como "Producto 1" es de tipo "const char [N]" y este, en las asignaciones y sentencia de retorno, genera un valor de tipo "const char *". El problema es que los tipos no coinciden ya que tanto la función como los elementos del array los declaras de tipo "char *" (sin el calificador const).

Una solución ya la indico x64Core, otra opción es simplemente utilizar el tipo correcto:
Código
  1. const char *Item_Name(int Item)
  2. {
  3. const char *ItemName[10];
  4.  
  5. ItemName[0] = "Producto 1";
  6. ItemName[1] = "Producto 2";
  7.  
  8. // ...
  9.  
  10. return ItemName[Item - 1];
  11. }

Un saludo


Título: Re: Conversion de String Constante a Char*
Publicado por: jonniemaxxx en 24 Mayo 2014, 20:19 pm
Oye muchas gracias ahora si :D esa respuesta es mas acorde con mi nivel actual de conocimiento :D jaja