elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funcion strcpy() propia
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion strcpy() propia  (Leído 3,706 veces)
juanma97

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Funcion strcpy() propia
« en: 23 Febrero 2017, 10:47 am »

Hola, soy nuevo en el foro, estoy haciendo la funcion strcpy() de C pero a mano, es decir por mi cuenta, lo que no logro es que copie la cadena s2 en s1 y le he dado mil vueltas pero no se como, ¿alguna ayuda? Gracias.

Código
  1. char* mi_strcpy(char* s1, char* s2){
  2. char* puntero = s1;
  3.    while(*s2 != '\0'){
  4. *puntero = *s2;
  5. puntero++;
  6. s2++;
  7.    }
  8. *puntero = '\0';
  9. return s1;
  10. }
  11.  
  12. void test_mi_strcpy()
  13.    {
  14. char* s1 = "abcdefgh";
  15. char s2 [8];
  16. INICIO_TEST("mi_strcpy");
  17. DebeSerCierto(mi_strcpy(s2, s1) == "abcdefgh");
  18. FIN_TEST("mi_strcpy");
  19.    }


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex


« Última modificación: 23 Febrero 2017, 12:06 pm por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Funcion strcpy() propia
« Respuesta #1 en: 23 Febrero 2017, 12:10 pm »

Hay un problema, y es que no puedes comparar 2 cadenas (char*) con ==. (Son punteros, no cadenas realmente)

Código
  1. DebeSerCierto(mi_strcpy(s2, s1) == "abcdefgh");

Si lo que queires es probar, haz un printf de la cadena copiada y listo.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Funcion strcpy() propia
« Respuesta #2 en: 23 Febrero 2017, 12:14 pm »

Código
  1. char* s1 = "abcdefgh";
  2. char s2 [8];

esto va a desbordarcuando lleque al \0 de s1 (el noveno caracter), escribirá la memoria fuera de s2
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
juanma97

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Funcion strcpy() propia
« Respuesta #3 en: 23 Febrero 2017, 15:50 pm »

Me sigue generando fallo, el metodo no me funciona, lo que hice fue:
Código
  1. DebeSerCierto(strequals(s2,s1), "abcdefgh");
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Funcion strcpy() propia
« Respuesta #4 en: 23 Febrero 2017, 16:21 pm »

No sé qué hace la función DebeSerCierto, así que insisto, saca por pantalla la nueva cadena y compruébalo tú mismo primero.
Y fíjate en lo que dijo engel lex.
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 811


¡ Hiperfoco !


Ver Perfil WWW
Re: Funcion strcpy() propia
« Respuesta #5 en: 23 Febrero 2017, 21:53 pm »

Puedes probar la función de ReactOS...

https://doxygen.reactos.org/d4/d17/utclib_8c_source.html#l00231

Código
  1. /*******************************************************************************
  2. *
  3. * FUNCTION:    strcpy
  4. *
  5. * PARAMETERS:  DstString       - Target of the copy
  6. *              SrcString       - The source string to copy
  7. *
  8. * RETURN:      DstString
  9. *
  10. * DESCRIPTION: Copy a null terminated string
  11. *
  12. ******************************************************************************/
  13. char *
  14. char                    *DstString,
  15. const char              *SrcString)
  16. {
  17.  char  *String = DstString;
  18.  
  19.   /* Move bytes brute force */
  20.  while (*SrcString)
  21.  {
  22.    *String = *SrcString;
  23.    String++;
  24.    SrcString++;
  25.  }
  26.  /* Null terminate */
  27.  *String = 0;
  28.  return (DstString);
  29. }


B#
En línea



ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Funcion strcpy() propia
« Respuesta #6 en: 23 Febrero 2017, 22:09 pm »

Es exactamente la misma función.

En cualquier caso, el problema es su forma de comprobarlo, no la función, que es correcta.
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 811


¡ Hiperfoco !


Ver Perfil WWW
Re: Funcion strcpy() propia
« Respuesta #7 en: 24 Febrero 2017, 01:40 am »

Un pequeño detalle con respecto al código que ahora lo miré bién:

Código
  1. (...)
  2. char* s1 = "abcdefgh";
  3. (...)
  4. DebeSerCierto(mi_strcpy(s2, s1) == "abcdefgh");
  5. (...)

No estás comparando los mismos strings directamente, sinó que estás comparando 2 direcciones de memoria distintas, el s1 apunta a una dirección en alguna sección "data" y el segundo "abcdefgh" estará apuntando a otra...

Para solucionarlo:

Código
  1. //variable global
  2. char stringComparar[]="abcdefgh";
  3.  
  4. función()
  5. {
  6.  char*s1=stringComparar;
  7.  (...)
  8.  DebeSerCierto(mi_string(s2,s1)==stringComparar;
  9.  (...)
  10. }

Edit: el resultado de "ser cierto" también creo que debería fallar porque estarías retornando la dirección de la variable de s2 que se encuentra en la pila, para comparar contenido de strings se recomienda funciones como strcmp y memcmp y/o sus variantes seguras...


B#
« Última modificación: 24 Febrero 2017, 01:49 am por BloodSharp » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
escape_string es una funcion propia de PHP?
PHP
Shell Root 2 4,163 Último mensaje 8 Marzo 2010, 14:09 pm
por Castg!
Problema con funcion strcpy().
Programación C/C++
dark-heimdall 1 4,985 Último mensaje 19 Febrero 2011, 06:36 am
por dark-heimdall
problema con uso de strcpy
Programación C/C++
m@o_614 2 2,770 Último mensaje 19 Diciembre 2011, 18:37 pm
por m@o_614
Reemplazar la función free por una propia.
Programación C/C++
NOB2014 6 3,160 Último mensaje 26 Abril 2016, 02:51 am
por NOB2014
Función strcpy propia en lenguaje C. (copiar una cadena en otra)
Programación C/C++
NOB2014 5 5,778 Último mensaje 27 Diciembre 2016, 22:07 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines