Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't I use this code to overwrite a string?

Tags:

c

pointers

Code:

#include "stdio.h"
#include "string.h"

int main()
{
  char *p = "abc";
  printf("p is %s \n", p);
  return 0;
}

Output:

p is abc

Code:

#include "stdio.h"
#include "string.h"

int main()
{
  char *p = "abc";
  strcpy(p, "def");
  printf("p is %s \n",p);
  return 0;
}

Output:

Segmentation fault (core dumped)

Could someone explain why this happens?

like image 441
aks Avatar asked Jul 11 '26 00:07

aks


1 Answers

In your code:

char *p="abc";

p points to a string literal - you are not allowed to change string literals, which is what your call to strcpy is trying to do. Instead, make p an array:

char p[] = "abc";

which will copy the literal into something that you are allowed to modify.