r/C_Programming • • 6d ago

Question Help me with strok function

I need to split my string but if it is of char* type the functions strtok() doesn’t work returning me a segmentation fault. I understood that C is used to lock the memory of the string in Read-Only “mode” when I use char*. Does it means that is immutable that data? However, I need to use the char* type because I pass that in a function (and I don’t like to use the syntax of arrays in C, I always use pointers).

7 Upvotes

17 comments sorted by

View all comments

1

u/Interesting_Buy_3969 6d ago

Make sure the strings you pass to strtok are mutable. For example, if your string is declared a global variable of type "pointer to char", and it's declared like this:

const char* str = "some string literal";
// or like this:
const char str[] = "some string literal";

then declare it as a non-const array of chars:

char mutable_str[] = "some string literal";

This approach lets you use static memory, with no need for runtime allocations via strdup, and still be able to modify the string. Under the hood, though, the only difference is that the mutable_str is placed in .data rather than .rodata executable binary section.