关于C#:swprintf声明不匹配

swprintf declaration mismatch

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

根据此参考文献,应为

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

但是当我使用

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

我得到错误

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

看起来像size_t len不在声明中。参考是否有误,我是否错过了某件事,或者背后有故事吗?


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

MinGW是使用Microsoft C运行时库的gcc端口。

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

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