Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con strcpy

Estas en el tema de Problema con strcpy en el foro de C/C++ en Foros del Web. Estoy trabajando un algoritmo de búsqueda por profundidad, pero cunado compilo no me correo el programa e identifique que la linea q me esta causando ...
  #1 (permalink)  
Antiguo 30/09/2010, 12:18
 
Fecha de Ingreso: noviembre-2009
Mensajes: 42
Antigüedad: 14 años, 5 meses
Puntos: 0
Pregunta Problema con strcpy

Estoy trabajando un algoritmo de búsqueda por profundidad, pero cunado compilo no me correo el programa e identifique que la linea q me esta causando el error es esta:

Código C:
Ver original
  1. strcpy(cualquier_lugar,vuelos[encuentra_pos].hacia); //--> AQUI SE TOTEA

Les dejo todo el código, gracias

Código C:
Ver original
  1. #define MAX 100
  2.  
  3. /*Estructura de la Base de Datos*/
  4. struct VL{
  5.   char desde[20];
  6.   char hacia[20];    
  7.   int distancia;
  8.   char visitado;
  9. };
  10.  
  11. struct VL vuelos[MAX]; /*Arreglo que contiene la estructura descrita anteriormente*/
  12.  
  13. int pos_ult=0; /*Ultimo elemento de la BBDD*/
  14. int encuentra_pos=0; /*Indice de la Busqueda*/
  15.  
  16. void inicia(){
  17.      declara_vuelo("Nueva York","Chicago",1000);
  18.      declara_vuelo("Chicago","Denver",1000);
  19.      declara_vuelo("Nueva York","Toronto",800);
  20.      declara_vuelo("Toronto","Calgary",1500);
  21.      declara_vuelo("Toronto","Los Angeles",1800);
  22.      declara_vuelo("Toronto","Chicago",500);
  23.      declara_vuelo("Denver","Urbana",1000);
  24.      declara_vuelo("Denver","Houston",1500);
  25.      declara_vuelo("Houston","Los Angeles",1000);
  26.      declara_vuelo("Denver","Los Angeles",1000);
  27. }
  28. /*Llenamos la BBDD*/
  29. void declara_vuelo(desde,hacia,dist)
  30. char *desde,*hacia;
  31. int dist;
  32. {
  33.   if(pos_ult<MAX){
  34.     strcpy(vuelos[pos_ult].desde,desde);
  35.     strcpy(vuelos[pos_ult].hacia,hacia);                    
  36.     vuelos[pos_ult].distancia=dist;
  37.     vuelos[pos_ult].visitado=0;
  38.     pos_ult++;
  39.   }
  40.   else printf("Base de Datos LLena \n");
  41. }
  42.  
  43. /*
  44. * Esta funcion calcula si hay una ruta directa en tre dos ciudades,
  45. * si hay conexion devuelve la distacia, sino devuelve 0 (cero)
  46. */
  47.  
  48. int unidas(desde,hacia)
  49. char *desde,*hacia;
  50. {
  51.     register int t;
  52.     //  La palabra clave register es un especificador de tipo de almacenamiento
  53.     // ("storage class specifier"); se utiliza para indicar al compilador que
  54.     // ciertas variables (normalmente del tipo int y char) deben ser almacenadas
  55.     // en los registros del procesador en lugar de la pila
  56.     for(t=pos_ult-1; t>-1; t--)
  57.      if(!strcmp(vuelos[t].desde,desde)&&!strcmp(vuelos[t].hacia,hacia)) return vuelos[t].distancia;
  58.    
  59.     return 0;
  60. }
  61.  
  62. /*
  63. * Esta Funcion busca si la ciudad desde tiene conexion con cualquier ciudad
  64. * si la encuentra retornara la distacia y sino retornara cero
  65. */
  66. int encuentra(desde,cualquier_lugar)
  67. char *desde, *cualquier_lugar;
  68. {
  69.  encuentra_pos=0; // Varible Global
  70.  while(encuentra_pos<pos_ult){
  71.    if(!strcmp(vuelos[encuentra_pos].desde,desde)&&!vuelos[encuentra_pos].visitado){
  72.      strcpy(cualquier_lugar,vuelos[encuentra_pos].hacia); //--> AQUI SE TOTEA
  73.      printf("%c",cualquier_lugar[0]);
  74.      printf("%c",cualquier_lugar[1]);
  75.      printf("%c \n",cualquier_lugar[2]);    
  76.      printf("%c",vuelos[encuentra_pos].hacia[0]);
  77.      printf("%c",vuelos[encuentra_pos].hacia[1]);
  78.      printf("%c \n",vuelos[encuentra_pos].hacia[2]);
  79.      /*vuelos[encuentra_pos].visitado = 1; /*Se Activa*/
  80.      return vuelos[encuentra_pos].distancia;                                                                            
  81.    }
  82.    encuentra_pos++;
  83.  }
  84.  return 0;                
  85. }
  #2 (permalink)  
Antiguo 30/09/2010, 12:27
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Problema con strcpy

EL ERROR SE DEBE A QUE NO LE HAS ASIGNADO MEMORIA AL APUNTADOR cualquier_lugar, RECUERDA QUE SI ES UNA CADENA DE CARACTERES EL TAMAÑO DEBER SER TAMAÑO DE LA CADENA MAS UNO.
  #3 (permalink)  
Antiguo 30/09/2010, 12:41
 
Fecha de Ingreso: noviembre-2009
Mensajes: 42
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema con strcpy

margarito04 muchas gracias creo entonces la solución es:

strcpy(&cualquier_lugar,vuelos[encuentra_pos].hacia); //--> AQUI SE TOTEA
  #4 (permalink)  
Antiguo 30/09/2010, 12:55
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Problema con strcpy

PUES NO, Ang3r.

solucion 1
asignar dinamicamente a cualquier_lugar la memoria neceria para almacenar la informacion que esta en hacia
y posteriormente utilizar strcpy, sin el &

solucion 2
crear cualquier_lugar como arreglo y no como un puntero.
y posteriormente utilizar strcpy, sin el &

solucion 3
si cualquier lugar solo lo vas a utilizar en esa funcion,
puedes hacerlo asi
cualquier_lugar = vuelos[encuentra_pos].hacia;
esta ultima lo hace una copia, solo esta haciendo referencia a vuelos[encuentra_pos].hacia

Te recomiendo que repases punteros y arreglos

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:11.