现在我正在寻找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;
}
答案 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
)来确定要使用的函数。