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。
我在 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。