Discussion:
No siquiera cargar una estructura me deja!
(demasiado antiguo para responder)
Olaf "El Blanco"
2005-12-26 19:18:05 UTC
Permalink
1. Leo el tema de estructuras de un PDF espectacular del lenguaje C.
2. Quiero practicar con algo simple y SIEMPRE hay problemas. En todos los
temas siempre hay algo que es distinto. O soy tonto para la programación o
mi manual es malo.




int main() {

struct billete billete_muestra, nuevo_billete;
// Carga datos para no cargarlos en cada prueba.
billete_muestra.numero = 1020;
billete_muestra.poblacion = "London" // AQUI VIENE EL ERROR DE TIPOS
billete_muestra.destino = "Inverness"; // AQUI VIENE EL ERROR DE TIPOS
billete_muestra.hora_salida = 0730;
billete_muestra.hora_llegada = 1320;
billete_muestra.fecha.dia = 28;
billete_muestra.fecha.mes = 12;
billete_muestra.fecha.ano = 2005;
billete_muestra.kilometros = 1100;
billete_muestra.precio = 80;

// nuevo_billete = carga_datos_billete();
// imprime_billete(nuevo_billete);

imprime_billete(billete_muestra);
getch();
return 0;
}


Así es como tengo echa la estructura:

struct ffecha
{
short int dia;
short int mes;
short int ano;
};

struct billete
{
int numero;
char poblacion[30];
char destino[30];
int hora_salida;
int hora_llegada;
struct ffecha fecha;
int kilometros;
int precio;
};

Feliz año a todos. Aparte de que en este año se conviertan en excelentes
programadores les deseo PAZ a todos los que han tenido y tienen paciencia
conmigo.
Hernán
2005-12-26 19:39:45 UTC
Permalink
poblacion es un array de char's, "London" es el puntero a un literal.

if (strlen("London") < 30)
strcpy(billete_muestra.poblacion, "London");
Hernán
2005-12-26 19:54:02 UTC
Permalink
Post by Hernán
poblacion es un array de char's, "London" es el puntero a un literal.
Perdón, empecé mal :(
No es un puntero, es la dirección del primer char en el literal.
heltena
2005-12-26 19:44:33 UTC
Permalink
No sé que preguntas y si lo sabes o no, pero esto va para los que lo
lean por primera vesss.

Se habrá escrito y dicho veintemil veces: para asignar un valor a un
string se debe utilizar la función strcpy y no un simple =, así que:

billete_muestra.poblacion = "London" // AQUI VIENE EL ERROR DE
TIPOS
billete_muestra.destino = "Inverness"; // AQUI VIENE EL ERROR DE
TIPOS

se cambia por:

strcpy(billete_muestra.poblacion, "London");
strcpy(billete_muestra.destino, "Inverness");

y ya puestos, mejor usar strncpy:

strncpy(billete_muestra.poblacion, "London", 30);
strncpy(billete_muestra.destino, "Inverness", 30);

que vaya bien la siguiente vuelta al sol !!!
--
Helio Tejedor
Olaf "El Blanco"
2005-12-26 19:58:07 UTC
Permalink
Gracias! Siento que sea tan básico!
Pero eso era exactamente lo que preguntaba.





"heltena" <***@gmail.com> escribi� en el mensaje news:***@g47g2000cwa.googlegroups.com...
No sé que preguntas y si lo sabes o no, pero esto va para los que lo
lean por primera vesss.

Se habrá escrito y dicho veintemil veces: para asignar un valor a un
string se debe utilizar la función strcpy y no un simple =, así que:

billete_muestra.poblacion = "London" // AQUI VIENE EL ERROR DE
TIPOS
billete_muestra.destino = "Inverness"; // AQUI VIENE EL ERROR DE
TIPOS

se cambia por:

strcpy(billete_muestra.poblacion, "London");
strcpy(billete_muestra.destino, "Inverness");

y ya puestos, mejor usar strncpy:

strncpy(billete_muestra.poblacion, "London", 30);
strncpy(billete_muestra.destino, "Inverness", 30);

que vaya bien la siguiente vuelta al sol !!!
--
Helio Tejedor
Oscar Garcia
2005-12-26 23:25:23 UTC
Permalink
El Mon, 26 Dec 2005 20:18:05 +0100, "Olaf \"El Blanco\""
Post by Olaf "El Blanco"
struct billete
{
int numero;
char poblacion[30];
char destino[30];
int hora_salida;
int hora_llegada;
struct ffecha fecha;
int kilometros;
int precio;
};
billete_muestra.poblacion = "London" // AQUI VIENE EL ERROR DE TIPOS
billete_muestra.destino = "Inverness"; // AQUI VIENE EL ERROR DE TIPOS
"London" es del tipo (char *). Es decir... es una cadena ya alojada en
memoria (generalmente en la pila durante la llamada a una función si
no está definido como "static") y estás asignando dicho puntero a un
array de elementos char.

Es como si tienes (un símil sin usar punteros):

int numeros[5];
numeros[1] = 6; // bien
numeros = 6; // mal

Aunque realmente es como si usaras:
int numeros[5], n = 6;
numeros[1] = n; // bien
numeros = &n; // mal

Como puedes imaginarte YA ESTA alojada la memoria para el array de
forma estática, de forma que no puedes cambiar el puntero porque es
inamovible.

Si la estructura llega a ser del tipo:

char *poblacion;
char *destino;

Entonces no te hubiera dado dicho error (no te recomiendo hacerlo por
razones obvias) ya que sí que puedes asignar a un puntero (char *) la
dirección de memoria donde está la cadena (que es otro char *).

Espero completar con esto la explicación y reforma hecha por heltena.

Un saludo.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Olaf "El Blanco"
2005-12-27 13:24:23 UTC
Permalink
Mejor aun. Gracias!
Se me aclararon muchas cosas.
Post by Oscar Garcia
El Mon, 26 Dec 2005 20:18:05 +0100, "Olaf \"El Blanco\""
Post by Olaf "El Blanco"
struct billete
{
int numero;
char poblacion[30];
char destino[30];
int hora_salida;
int hora_llegada;
struct ffecha fecha;
int kilometros;
int precio;
};
billete_muestra.poblacion = "London" // AQUI VIENE EL ERROR DE TIPOS
billete_muestra.destino = "Inverness"; // AQUI VIENE EL ERROR DE TIPOS
"London" es del tipo (char *). Es decir... es una cadena ya alojada en
memoria (generalmente en la pila durante la llamada a una función si
no está definido como "static") y estás asignando dicho puntero a un
array de elementos char.
int numeros[5];
numeros[1] = 6; // bien
numeros = 6; // mal
int numeros[5], n = 6;
numeros[1] = n; // bien
numeros = &n; // mal
Como puedes imaginarte YA ESTA alojada la memoria para el array de
forma estática, de forma que no puedes cambiar el puntero porque es
inamovible.
char *poblacion;
char *destino;
Entonces no te hubiera dado dicho error (no te recomiendo hacerlo por
razones obvias) ya que sí que puedes asignar a un puntero (char *) la
dirección de memoria donde está la cadena (que es otro char *).
Espero completar con esto la explicación y reforma hecha por heltena.
Un saludo.
--
Óscar Javier García Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Loading...