- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道为什么我对 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_s
、memcpy_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/
我正在使用 visual studio 2010 为 Windows 编写 C 程序。我正在使用 swprintf_s 函数将格式化字符串写入 wchar_t 缓冲区。当我尝试写入已初始化的缓冲区时出
我在调试窗口中格式化 double 打印输出时遇到问题。我尝试使用 swprintf_s 函数和 %d,该值是 0.804,但它根本不起作用。 我得到值 65384...我应该如何改进这段代码? vo
我想知道为什么我对 swprintf_s 的使用会生成链接器警告 warning: implicit declaration of function 'swprintf_s' 我有这个标题: #inc
我是一名优秀的程序员,十分优秀!