Conversion de String Constante a Char*

Iniciado por jonniemaxxx, 24 Mayo 2014, 03:52 AM

0 Miembros y 1 Visitante están viendo este tema.

jonniemaxxx

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 (cpp) [Seleccionar]
char* Item_Name(int Item){
    char* ItemName[10];
    ItemName[0] = "Producto 1";
    ItemName[1] = "Producto 2";
    ItemName[2] = "Producto 3";
    ItemName[3] = "Producto 4";
    ItemName[4] = "Producto 5";
    ItemName[5] = "Producto 6";
    ItemName[6] = "Producto 7";
    ItemName[7] = "Producto 8";
    ItemName[8] = "Producto 9";
    ItemName[9] = "Producto 10";
    //Retorna el Nombre del Producto Item
    return ItemName[Item-1];
};


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

x64core

Cita de: 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 (cpp) [Seleccionar]
char* Item_Name(int Item){
    char* ItemName[10];
    ItemName[0] = "Producto 1";
    ItemName[1] = "Producto 2";
    ItemName[2] = "Producto 3";
    ItemName[3] = "Producto 4";
    ItemName[4] = "Producto 5";
    ItemName[5] = "Producto 6";
    ItemName[6] = "Producto 7";
    ItemName[7] = "Producto 8";
    ItemName[8] = "Producto 9";
    ItemName[9] = "Producto 10";
    //Retorna el Nombre del Producto Item
    return ItemName[Item-1];
};


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?

jonniemaxxx

o sea de la linea 3 a la linea 12 hahaha como lo harias tu ? ando algo perdido y si en la asignacion

x64core

Cita de: 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
Simplemente crear el array:
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;
};

rir3760

Cita de: jonniemaxxx en 24 Mayo 2014, 03:52 AMno entiendo porque me bota un warning en esta funcion
Código (cpp) [Seleccionar]
char* Item_Name(int Item)
{
    char* ItemName[10];
   
    ItemName[0] = "Producto 1";
    ItemName[1] = "Producto 2";
   
    // ...
   
    return ItemName[Item-1];
};
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 (cpp) [Seleccionar]
const char *Item_Name(int Item)
{
const char *ItemName[10];

ItemName[0] = "Producto 1";
ItemName[1] = "Producto 2";

// ...

return ItemName[Item - 1];
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

jonniemaxxx

Oye muchas gracias ahora si :D esa respuesta es mas acorde con mi nivel actual de conocimiento :D jaja