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; } 03 Answers
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().