Входящий в платформу X wcstok ()? - PullRequest
0 голосов
/ 01 декабря 2010

Прямо сейчас я ищу реентерабельную версию wcstok(), известную GCC и другим компиляторам (если есть).

Пока что я использую wcstok_s(), но это только MSVC, и мне нужно также скомпилировать код на других платформах. Хотя некоторые страницы предлагают wcstok_r(), я не смог найти его в заголовках GCC. На других (man) страницах упоминается strtok_s() без конкретной широкоформатной версии, но упоминается, что она используется только для многобайтных строк (?).

Итак, я открыт для предложений. Написание моей собственной обертки / версии было бы только последним выходом.

Редактировать для aschepler: Пример кода, который не компилируется из-за too many arguments - должен компилироваться, несмотря на бессмысленность:

#include <cwchar> // includes wchar.h as well

int main(void)
{
    wchar_t *a, *b, *c;
    wcstok(a, b, &c);
    return 0;
}

1 Ответ

0 голосов
/ 01 декабря 2010

Функция wcstok, указанная C89 (и, следовательно, C ++), является реентерабельной и имеет ту же сигнатуру и, по сути, то же поведение, что и Microsoft wcstok_s. wcstok должно быть объявлено в <wchar.h> и / или <cwchar>.

wchar_t* wcstok(wchar_t* s, const wchar_t* delim, wchar_t** ptr);

Но похоже, что Microsoft wcstok имеет неправильную подпись.

Так что, возможно, вы можете использовать #ifdef _WINDOWS (вместо #ifdef _MSC_VER), чтобы определить, какую функцию использовать, если вы столкнетесь с этой проблемой, даже используя gcc в Windows.

...