Autor
|
Tema: Funcion strcpy() propia (Leído 3,816 veces)
|
juanma97
Desconectado
Mensajes: 2
|
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. char* mi_strcpy(char* s1, char* s2){ char* puntero = s1; while(*s2 != '\0'){ *puntero = *s2; puntero++; s2++; } *puntero = '\0'; return s1; } void test_mi_strcpy() { char* s1 = "abcdefgh"; char s2 [8]; INICIO_TEST("mi_strcpy"); DebeSerCierto(mi_strcpy(s2, s1) == "abcdefgh"); FIN_TEST("mi_strcpy"); }
· 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
Mensajes: 3.412
ASMático
|
Hay un problema, y es que no puedes comparar 2 cadenas (char*) con ==. (Son punteros, no cadenas realmente) 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
|
char* s1 = "abcdefgh"; 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
Mensajes: 2
|
Me sigue generando fallo, el metodo no me funciona, lo que hice fue: DebeSerCierto(strequals(s2,s1), "abcdefgh");
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 813
¡ Hiperfoco !
|
Puedes probar la función de ReactOS... https://doxygen.reactos.org/d4/d17/utclib_8c_source.html#l00231/******************************************************************************* * * FUNCTION: strcpy * * PARAMETERS: DstString - Target of the copy * SrcString - The source string to copy * * RETURN: DstString * * DESCRIPTION: Copy a null terminated string * ******************************************************************************/ char * char *DstString, const char *SrcString) { char *String = DstString; /* Move bytes brute force */ while (*SrcString) { *String = *SrcString; String++; SrcString++; } /* Null terminate */ *String = 0; return (DstString); }
B#
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 813
¡ Hiperfoco !
|
Un pequeño detalle con respecto al código que ahora lo miré bién: (...) char* s1 = "abcdefgh"; (...) DebeSerCierto(mi_strcpy(s2, s1) == "abcdefgh"); (...)
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: //variable global char stringComparar[]="abcdefgh"; función() { char*s1=stringComparar; (...) DebeSerCierto(mi_string(s2,s1)==stringComparar; (...) }
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
escape_string es una funcion propia de PHP?
PHP
|
Shell Root
|
2
|
4,172
|
8 Marzo 2010, 14:09 pm
por Castg!
|
|
|
Problema con funcion strcpy().
Programación C/C++
|
dark-heimdall
|
1
|
5,018
|
19 Febrero 2011, 06:36 am
por dark-heimdall
|
|
|
problema con uso de strcpy
Programación C/C++
|
m@o_614
|
2
|
2,808
|
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,251
|
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,903
|
27 Diciembre 2016, 22:07 pm
por NOB2014
|
|