gpt4 book ai didi

c - 警告: implicit declaration of function 'swprintf_s' ?是什么原因

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:13 28 4
gpt4 key购买 nike

我想知道为什么我对 swprintf_s 的使用会生成链接器警告 warning: implicit declaration of function 'swprintf_s'

我有这个标题:

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <windows.h>
#include <tchar.h>

LPCWSTR foo = L"É %s";
LPCWSTR arg = "bá";
LPCWSTR msg = malloc(wcslen((wchar_t*)foo) + wcslen((wchar_t*)arg) + 1);
swprintf_s(msg, (wchar_t*)foo, (wchar_t*)arg);

我该如何解决这个问题?

最佳答案

所有 _s函数(swprintf_smemcpy_s)是 Microsoft 添加的。它们是 Microsoft C 库的一部分。当您使用 GCC 时,您将最终使用一个不同的 C 库,它不包括 Microsoft 的添加(但可能包括它自己的添加)。 Microsoft 将他们的 C 库称为“CRT”或“C 运行时”,GCC 用户将其称为“libc”甚至“glibc”(这是一种特定的实现)。

如果您查看 Microsoft 标准 C 库 ( MSDN docs ) 中的函数列表,您会发现有相当多的非标准函数。其中大部分是 Microsoft 的“安全增强”(MSDN docs) 的一部分。一般来说,我建议避免使用安全增强功能,因为它们不可移植,而且对于编写安全代码而言不是必需的。

修复:您可以使用 swprintf而不是 swprintf_s . swprintf函数是 C 标准的一部分,因此它存在于许多实现中(尽管在非 Windows 平台上应避免使用它,因为它使用 wchar_t )。

LPCWSTR foo = L"É %s";
LPCWSTR arg = L"bá";
size_t msgbuflen = wcslen(foo) + wcslen(arg) + 1;
LPCWSTR msg = malloc(len);
if (!msg) error...;
swprintf(msg, msgbuflen, foo, arg);

请注意 LPCWSTR只是 const wchar_t * 的奇特 typedef , 所以你不需要把它转换成 wchar_t * .

关于c - 警告: implicit declaration of function 'swprintf_s' ?是什么原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com