X平台可重入wcstok()?

时间:2010-12-01 17:39:10

标签: c++ gcc cross-platform reentrancy

现在我正在寻找GCC和其他编译器所知的wcstok()的可重入版本(如果有的话)。

到目前为止,我使用wcstok_s(),但那只是MSVC,我也需要在其他平台上编译代码。虽然有些网页建议wcstok_r()我在GCC标题中找不到它。其他(人)页面提到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 :(得分:0)

C89(以及C ++)指定的函数wcstok是可重入的,具有与Microsoft wcstok_s相同的签名和基本相同的行为。 wcstok应在<wchar.h>和/或<cwchar>中声明。

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

但看起来微软的wcstok签名不正确。

因此,如果您在Windows上使用gcc时遇到此问题,也许可以使用#ifdef _WINDOWS(而不是#ifdef _MSC_VER)来确定要使用的函数。