2012-04-26 38 views
11

Me pregunto por qué estoy recibiendo un error de segmentación en el siguiente código.falla de segmentación con strcpy

int main(void) 
{ 
     char str[100]="My name is Vutukuri"; 
     char *str_old,*str_new; 

     str_old=str; 
     strcpy(str_new,str_old); 

     puts(str_new); 

     return 0; 
} 

Respuesta

21

No ha inicializado *str_new por lo que solo está copiando str_old a alguna dirección aleatoria. que tiene que hacer bien esto:

char str_new[100]; 

o

char * str = (char *) malloc(100); 

que tendrá que #include <stdlib.h> si no lo ha hecho cuando se utiliza la función malloc.

7

str_new es un puntero no inicializado, por lo que están tratando de escribir en un (cuasi) dirección aleatoria.

2

Porque str_new no apunta a la memoria válida: no está inicializada, contiene basura y probablemente puntos en la memoria que ni siquiera se asignan si se produce un error de segmentación. Debe hacer que str_new señale un bloque de memoria válido lo suficientemente grande como para contener la cadena de interés, incluido el byte \0 al final, antes de llamar al strcpy().

Cuestiones relacionadas