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;
}
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 makestr_new
point to a valid block of memory large enough to hold the string of interest -- including the\0
byte at the end -- before callingstrcpy()
.You haven't initialized
*str_new
so it is just copyingstr_old
to some random address. You need to do either this:or
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.