-1

现在我正在寻找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;
}
4

1 回答 1

0

wcstokC89(以及因此 C++)指定的函数是可重入的,并且具有与 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

于 2010-12-01T17:47:33.453 回答