Having this:
#define _DEFAULT_SOURCE 1
#include
#include
int main(){
char *token, org[] = "Cats,Dogs,Mice,,,Dwarves
The strsep function requires the address of a modifiable pointer as its first argument (or NULL, in which case it does nothing); you are passing it the (fixed) address of an array. You can fix this by declaring a separate char* variable and assigning to that the (address of the) org array:
int main()
{
char* token, org[] = "Cats,Dogs,Mice,,,Dwarves,Elves:High,Elves:Wood";
char* porg = org; // "porg" is a MODIFIABLE pointer initialized with the start address of the "org" array
while ((token = strsep(&porg, ",")))
printf("Token: %s\n", token);
return 0;
}
From the Linux manual page (bolding mine):
If
*stringpisNULL, thestrsep()function returnsNULLand does nothing else. Otherwise, this function finds the first token in the string*stringp, that is delimited by one of the bytes in the stringdelim. This token is terminated by overwriting the delimiter with a null byte ('\0'), and*stringpis updated to point past the token. In case no delimiter was found, the token is taken to be the entire string*stringp, and*stringpis madeNULL.
On the meaning and use of the restrict keyword, maybe this will help: Realistic usage of the C99 'restrict' keyword?.