Click here to load reader
Upload
paola-amadeo
View
57
Download
0
Embed Size (px)
DESCRIPTION
Ejemplo de cadenas en C. El ejemplo tiene varios problemas y se ven en la animación como se van sucediendo
Citation preview
void my_strcpy(char *dst, char *src){
while (*dst++ = *src++);
}
● ¿Es segura la implementación anterior?
Si la invocación a la función my_strcpy es la siguiente:
char *origen= “a”,
*destino = “hola”;
my_strcpy(origen,destino);● ¿Es correcta la definición anterior?
Seminario de Lenguajes C
Cadena de Caracteres – Un caso para analizar
● char *destino= “a”,
*origen = “hola”;
my_strcpy(destino,origen);
a \0 h o l a \0
destino origen
dst src
void my_strcpy(char *dst, char *src){
while (*dst++ = *src++);
return 1;
}
h \0 h o l a \0
dst src
1° iteración
h o h o l a \0
dst src2° iteración
h o l o l a \0
dst src3° iteración
h o l a l a \0
dst src4° iteración
h o l a /0 a \0
dst src5° iteración
destino y origen están apuntando a strings literales, constantes, que no se pueden modificar.
Debería ser char destino[]=”a”; Que es equivalente a{'a', '\0'}
char *destino= (char *)malloc(sizeof(char)*5);
*origen = (char *)malloc(sizeof(char)*5);
strcpy(destino, “a”);
strcpy(origen, “hola”);
my_strcpy(destino,origen);
a \0 h o
destino origen
dst src
void my_strcpy(char *dst, char *src){
while (*dst++ = *src++);
return 1;
}
Ahora las cadenas tienen espacio para crecer sin pisarse. Además pueden estar en espacios no consecutivos de memoria.
l a \0
http://stackoverflow.com/questions/5645949/program-aborts-when-using-strcpy-on-a-char-pointer-works-fine-on-char-array