I'm trying to use this function in a C program that needs to be able to compile in Linux and Windows. At first I tried using strtok_r, but then when I compiled on windows, it complained about the function not existing and said it would assume it's an extern function, but then failed. I then used strtok_s and it compiled! Then I tried on Linux but now it's complaining that there is an "undefined reference to 'strtok_s'".
Is one a windows only function and the other a linux function??? What can I do to make it compile on both?
strtok_s
is simply the Windows version of strtok_r
which is standard everywhere else.
One (common I would think) way to make a program portable when it comes to functions like strtok_s
/strtok_r
is to use the preprocessor:
#if defined(_WIN32) || defined(_WIN64)
/* We are on Windows */
# define strtok_r strtok_s
#endif
As the prototypes and functionality is the same, you can now use only strtok_r
.