X 平台可重入 wcstok()?

发布于 2024-10-05 15:01:45 字数 515 浏览 4 评论 0原文

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

到目前为止,我使用 wcstok_s() 但那只是 MSVC,我还需要在其他平台上编译代码。虽然有些页面建议使用 wcstok_r(),但我在 GCC 标头中找不到它。其他(手册)页面提到 strtok_s() 没有特定的宽字符版本,但提到据说它仅用于多字节字符串(?)。

所以,我愿意接受建议。编写我自己的包装器/版本只是最后的解决方案。

编辑阿舍普勒: 由于参数太多而无法编译的示例代码 - 尽管毫无意义,但应该编译:

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

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

Right now I'm looking for a reentrant version of wcstok() that is known by GCC and other compilers (if there's any).

So far I use wcstok_s() but that one is MSVC only and I need to compile the code on other platforms as well. While some pages suggest wcstok_r() I couldn't find it in my GCC headers. Other (man)pages mention strtok_s() without a specific wide char version but mention it's said to be used for for multibyte strings only(?).

So, I'm open for suggestions. Writing my own wrapper/version would be a last way out solution only.

Edit for aschepler:
Sample code that doesn't compile due to too many arguments - should compile despite being pointless:

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白云悠悠 2024-10-12 15:01:45

C89(因此也是 C++)指定的函数 wcstok 是可重入的,并且与 Microsoft 的 wcstok_s 具有相同的签名和基本相同的行为。 wcstok 应在 和/或 中声明。

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

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

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

The function wcstok specified by C89 (and therefore C++) is reentrant and has the same signature and essentially the same behavior as Microsoft's wcstok_s. wcstok should be declared in <wchar.h> and/or <cwchar>.

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

But it looks like Microsoft's wcstok has an incorrect signature.

So maybe you can use #ifdef _WINDOWS (rather than #ifdef _MSC_VER) to determine which function to use, if you run into this problem even using gcc on Windows.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文