3

Click here to load reader

05 punteros - cadena con problemas

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

Page 1: 05   punteros - cadena con problemas

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

Page 2: 05   punteros - cadena con problemas

● 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'}

Page 3: 05   punteros - cadena con problemas

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