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

por que me da error esta funcion?

Estas en el tema de por que me da error esta funcion? en el foro de C/C++ en Foros del Web. esta es una funcion creada por mi (esta dentro de main.c): char *mid2 (char *str1, int pos, int uds){ char str2[uds]; int z;for (z=pos;z<=pos+uds-1;z++){str2[z-pos]=str1[z];} return ...
  #1 (permalink)  
Antiguo 19/01/2008, 20:42
 
Fecha de Ingreso: marzo-2004
Mensajes: 26
Antigüedad: 20 años, 9 meses
Puntos: 0
por que me da error esta funcion?

esta es una funcion creada por mi (esta dentro de main.c):

char *mid2 (char *str1, int pos, int uds){
char str2[uds];
int z;for (z=pos;z<=pos+uds-1;z++){str2[z-pos]=str1[z];}
return *str2;
}

pero al compilar en el main.c me lanza este error:
main.c: En la función ‘mid2’:
main.c:424: aviso: la devolución crea un puntero desde un entero sin una conversión

yo quiero que me devuelva una cadena con el trozo pedido, o sea str2.
Muchas gracias.
  #2 (permalink)  
Antiguo 21/01/2008, 06:10
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 10 meses
Puntos: 22
Re: por que me da error esta funcion?

Estás tratando de devolver un caracter y no un puntero como indica la función.
También trata de utilizar memoria dinámica para str2 ya que al momento de compilar, el compilador no conoce el valor de uds en la declaración de str2.

char str2[uds]; // uds = ¿?

Puedes simplificar mas si utilizas la libreria string.h, ya existen funciones que implementan en gran parte lo que quieres hacer.

Salu2.
  #3 (permalink)  
Antiguo 21/01/2008, 10:20
 
Fecha de Ingreso: marzo-2004
Mensajes: 26
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: por que me da error esta funcion?

Gracias fightmx por tu ayuda.
Pero aunque ponga
char str2[5];
sigue dandome el mismo error.

que funciones de string.h puedo usar para hacer esto?

mucha gracias de nuevo amigo.
  #4 (permalink)  
Antiguo 21/01/2008, 10:31
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: por que me da error esta funcion?

La forma "correcta" sería:
Código:
char *mid2 (char *str1, int pos, int uds)
{
  char str2[uds];
  int z;
  for (z=pos;z<=pos+uds-1;z++)
    str2[z-pos]=str1[z];

  return str2;
}
El problema con eso es que estarías retornando un puntero a algo que ya no existe, porque cuando salgas del ámbito de la función str2 ya no existirá.

Te recomiendo que leas un manual de punteros y cadenas de caracteres, en google hay mucha info al respecto y si no me equivoco en las FAQs del foro también hay algo al respecto.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 21/01/2008, 12:56
 
Fecha de Ingreso: marzo-2004
Mensajes: 26
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: por que me da error esta funcion?

yo lo que pretendia es poder usar la tipica funcion mid.
o sea, poder usarla asi:

main(){
...
a=mid(x,1,2)
...
}

char *mid(char *string,int i,int p){
....
...
}

y no puedo hacerlo
  #6 (permalink)  
Antiguo 22/01/2008, 07:18
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 7 meses
Puntos: 28
Re: por que me da error esta funcion?

Si, lo sé y entiendo lo que quieres hacer. Solo estoy dandote orientación para que sepas más o menos por que camino ir, yo lo sé hacer y si te posteo la solución no tiene chiste, la idea es que aprendas.

Si te sugiero que revises un manual de punteros y cadenas de caracteres es porque tengo una buena razón para ello, no porque no quiera ayudarte, todo lo contrario, se que aprenderás más así.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #7 (permalink)  
Antiguo 23/01/2008, 13:29
 
Fecha de Ingreso: marzo-2004
Mensajes: 26
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: por que me da error esta funcion?

lucifer gracias.
Mira la verdad, o soy muy torpe, o ya soy viejo.
Pero aun no he podido dar con la solucion.
Ayudame porfa.
Muchas gracias.

Tambien lo prové asi:

char mid2 (char *str1, int pos, int uds)
{
char str2[uds];
int z;
for (z=pos;z<=pos+uds-1;z++)
str2[z-pos]=str1[z];

return str2[1];
}

pero asi es devolver solo un caracter.

joder, no lo consigo.
Lo unico que lo consigo es

void mid2 (char *str1, int pos, int uds,char *str2)
{
int z;
for (z=pos;z<=pos+uds-1;z++)
str2[z-pos]=str1[z];
}

pero claro siempre tengo que enviarle las 2 cadenas (str1, str2).
A mi me interesa mas que solo le envie una...y la funcion sea la que devuelva la cadena.

Help.

Última edición por eldelpuerto; 23/01/2008 a las 13:40
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 18:54.