swprintf 声明不匹配

swprintf declaration mismatch

我在 Windows(gcc 版本 4.8.1)上使用 MinGW g++ 编译器,我对 swprintf 声明感到困惑

根据this reference应该是

int swprintf (wchar_t* ws, size_t len, const wchar_t* format, ...);

然而当我使用

swprintf(my_ws, 32, L"hello");

我收到错误

initializing argument 2 of 'int swprintf(wchar_t*, const wchar_t*, ...)' [-fpermissive]

看起来 size_t len 不在声明中。引用有误吗,我是不是遗漏了什么,或者背后有什么故事?

您使用的 C 库不符合 C99 标准。

MinGW 是 gcc 的一个端口,它使用 Microsoft C 运行时库。

在标准化为 C99 之前,Microsoft 有自己的 swprintf 版本,但原型不同。这是一个非常古老的 C 库,有很多 C99 不兼容性,例如我认为它的 printf 不支持 %zu for size_t...

如果他们使用更新的运行时,您应该升级到更新版本的 MinGW。否则,您将不得不使用旧原型,并忍受这些过时的 API。