Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Static C string allocation question

Consider the following code:

char* str = "Hello World";
memcpy(str, "Copy\0", 5);

A segmentation fault occurs during the memcpy. However, using this code:

char str[12];
memcpy(str, "Hello World\0", 12);
memcpy(str, "Copy\0", 5);

The program does not produce a segmentation fault.

Does the problem arise from allocating the memory on the stack versus the data section?

like image 705
Anne Nonimus Avatar asked Dec 10 '22 13:12

Anne Nonimus


1 Answers

When you use a string literal in gcc the value is placed in read-only memory and cannot be modified. Trying to modify it leads to undefined behaviour. Usually you will get a segmentation fault on Linux when you try to do this.

The second example works because you aren't modifying the string literal, you are modifying a copy of it that is stored in variable that is not read-only.

like image 57
Mark Byers Avatar answered Dec 17 '22 14:12

Mark Byers