Возможно, Microsoft пытается заставить вас использовать wsctok_s
вместо стандартного, но не реентерабельного wsctok
, особенно в коде драйвера устройства, связанном с ядром Windows.
Если strtok_s
также отсутствует, это означает, что библиотека C для разработки ядра и драйверов не завершена. Вы находитесь в размещенной среде, части стандартной библиотеки C могут отсутствовать.
Обратите внимание, что вы не используете старый прототип для wcstok()
: Microsoft изменила прототип для wcstok
в VisualStudio 2015, чтобы привести его в соответствие со стандартом C:
wchar_t *wcstok(wchar_t *restrict ws1, const wchar_t *restrict ws2,
wchar_t **restrict ptr);
Было бы лучше избегать использования этой функции и изменить свой код, чтобы использовать wcschr()
напрямую.
Если wcschr
тоже отсутствует, используйте эту простую реализацию:
/* 7.29.4.5 Wide string search functions */
wchar_t *wcschr(const wchar_t *s, wchar_t c) {
for (;;) {
if (*s == c)
return (wchar_t *)s;
if (*s++ == L'\0')
return NULL;
}
}
Вот стандартная совместимая реализация wcstok()
:
wchar_t *wcstok(wchar_t *restrict s1, const wchar_t *restrict s2,
wchar_t **restrict ptr) {
wchar_t *p;
if (s1 == NULL)
s1 = *ptr;
while (*s1 && wcschr(s2, *s1))
s1++;
if (!*s1) {
*ptr = s1;
return NULL;
}
for (p = s1; *s1 && !wcschr(s2, *s1); s1++)
continue;
if (*s1)
*s1++ = L'\0';
*ptr = s1;
return p;
}
person
chqrlie
schedule
18.01.2016
wcstok
. - person dxiv   schedule 18.01.2016