Segmentation Fault with Strcpy [Duplicate]

I am wondering why am I getting segmentation fault in the below code.

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;
}
0

You haven't initialized *str_new so it is just copying str_old to some random address. You need to do either this:

char str_new[100];

or

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

You will have to #include <stdlib.h> if you haven't already when using the malloc function.

str_new is an uninitialized pointer, so you are trying to write to a (quasi)random address.

Because str_new doesn't point to valid memory -- it is uninitialized, contains garbage, and likely points into memory that's not even mapped if you're getting a segmentation error. You have to make str_new point to a valid block of memory large enough to hold the string of interest -- including the \0 byte at the end -- before calling strcpy().

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest