| 
	
		|  Autor | Tema: Funcion strcpy() propia  (Leído 4,517 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 | 
 
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 | 
 
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 globalchar 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,382 |  8 Marzo 2010, 14:09 pm por Castg!
 |  
						|   |   | Problema con funcion strcpy(). Programación C/C++
 | dark-heimdall | 1 | 5,243 |  19 Febrero 2011, 06:36 am por dark-heimdall
 |  
						|   |   | problema con uso de strcpy Programación C/C++
 | m@o_614 | 2 | 3,105 |  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,948 |  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 | 6,607 |  27 Diciembre 2016, 22:07 pm por NOB2014
 |    |