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

Duda de violacion de segmento

Estas en el tema de Duda de violacion de segmento en el foro de C/C++ en Foros del Web. Hola buenas, llevo un rato trabajando con este código, porque quiero hacer busquedas en duckduckgo, e intentando obtener la url me da violacion de segmento, ...
  #1 (permalink)  
Antiguo 21/12/2012, 19:26
 
Fecha de Ingreso: mayo-2012
Ubicación: Vigo, Galicia
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 2
Duda de violacion de segmento

Hola buenas, llevo un rato trabajando con este código, porque quiero hacer busquedas en duckduckgo, e intentando obtener la url me da violacion de segmento, me gustaría que si alguien puede, que me indique donde esta el error, ya que no lo encuentro. Saludos.
Código:


Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. /* ---------------------------------------------------------- */
  5.  
  6. char get_url() {
  7.  
  8.   char * url = "";
  9.   char * url1 = "http://api.duckduckgo.com/?q=";
  10.   char searching[40];
  11.   printf("Enter your search: ");
  12.   scanf("%s", searching);
  13.   char * url2 = "&format=xml\n";
  14.  
  15.   asprintf(&url, "%s%s%s", url1, searching, url2);
  16.   printf("%s", url);
  17.   return *url;
  18. }
  19.  
  20. int main() {
  21.   char * result;
  22.   *result = get_url();
  23.   printf("%s", *result);
  24.   return 0;
  25. }
  #2 (permalink)  
Antiguo 22/12/2012, 08:05
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Duda de violacion de segmento

Tienes muchos errores de concepto, revisa tu manual de C (aunque lo compiles como c++), concretamente la parte de variables, tipos de variables y referencias (punteros) a variables.

Antes de implementar la logica de la funcion, intenta que compile correctamente: la variable 'result' es un puntero al que se le asigna el retorno de la funcion 'get_url()', pero la funcion 'get_url()' no retorna ningun puntero sino que retorna un tipo estatico 'char' lo cual es incompatible con la asignacion a la variable; para corregirlo tienes que declarar la funcion para que retorne un puntero, o bien enviar la variable como argumento para que la funcion le asigne algun tipo de dato.

Saludos
vosk
  #3 (permalink)  
Antiguo 22/12/2012, 17:35
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 6 meses
Puntos: 127
Respuesta: Duda de violacion de segmento

Si retorna char es un char y no puntero hacia char (char *). Tienes que ver la diferencia. Que un array de chars se referencie mediante un puntero hacia elp primer elemento del array no es más que una cuestión de protocolo. En tu caso lo que tienes que devolver es un puntero hacia char.

En tu caso y si compilas C++ para eso existe el objeto string

std::string get_url(blablabla)

std::string resultado = get_url()

Si quieres devolver un solo char (url de un char?) tienes que expresarlo de forma no litearl, o sea, mediante una expresión numérica hexadecimal, decimal u octal, ya que los literales son constantes per sé y la variable sería un puntero hacia la dirección de memoria del primer char literal.

char a = 0x61;
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 22/12/2012 a las 17:42

Etiquetas: int, segmento, string
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 01:26.