c - Segmentation fault occurring when modifying a string using pointers? -


context

i'm learning c, , i'm trying reverse string in place using pointers. (i know can use array; more learning pointers.)

problem

i keep getting segmentation faults when trying run code below. gcc seems not *end = *begin; line. why that?

especially since code identical the non-evil c function discussed in question

#include <stdio.h> #include <string.h>  void my_strrev(char* begin){     char temp;     char* end;     end = begin + strlen(begin) - 1;      while(end>begin){         temp = *end;         *end = *begin;         *begin = temp;         end--;         begin++;     } }  main(){     char *string = "foobar";     my_strrev(string);     printf("%s", string); } 

one problem lies parameter pass function:

char *string = "foobar"; 

this static string allocated in read-only portion. when try overwrite

*end = *begin; 

you'll segfault.

try with

char string[] = "foobar"; 

and should notice difference.

the key point in first case string exists in read-only segment , pointer used while in second case array of chars proper size reserved on stack , static string (which exists) copied it. after you're free modify content of array.


Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -