No tengo suficiente reputación para comentar otras respuestas, así que tendré que proporcionar la mía.
Para hacer frente a esta declaración:
"strtok_s es un desbordamiento de búfer versión segura de strtok en Windows El strtok estándar en ventanas es hilo de seguridad ...."
Esto no es cierto. strtok_s es la versión segura de subprocesos para el compilador de MSVC. strtok no es seguro para subprocesos
Para hacer frente a esta declaración:
"Esto probablemente se rompería si la compilación de cygwin que informa como ventanas, pero tiene las interfaces POSIX como strtok_r ya definido."
Nuevamente, no es cierto. La diferencia es qué compilador usas. Al usar el compilador de Visual C++ de Microsoft, MSVC, la función es strtok_s. Otro compilador, como GNU Compiler Collection, GCC, puede usar una implementación de biblioteca estándar diferente, como strtok_r. Piensa en el compilador, no en la plataforma de destino, al identificar qué función usar.
En mi opinión, la respuesta de Joachim Pileborg es la mejor en esta página. Sin embargo, se necesita una pequeña edición:
#if defined(_WIN32) /* || defined(_WIN64) */
#define strtok_r strtok_s
#endif
Tanto _WIN32 y _WIN64 son macros predefinidas proporcionadas por el compilador MSVC._WIN64 se define al compilar un objetivo de 64 bits. _WIN32 se define para objetivos de 32 y 64 bits. Este es un compromiso que Microsoft hizo para la compatibilidad con versiones anteriores. _WIN32 se creó para especificar la API de Win32. Ahora debería considerar _WIN32 para especificar la API de Windows, no es específico para un objetivo de 32 bits.
['strtok_r()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok_r.html) es POSIX; ['strtok_s()'] (http://msdn.microsoft.com/en-us/library/ftsafwz3.aspx) es Windows. Use plain 'strtok()' que está disponible en todas las implementaciones * (compatible con C89) *. – pmg
El problema es que necesito strtok una cadena mientras strtoking otra cadena, razón por la cual necesito este, ya que guarda el estado. – petranaya
@pmg - a menos que necesite seguridad de desbordamiento de búfer 0 –