- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要计算格式化的 wchar 数组所需的大小。
考虑以下代码:
wchar_t* Format(const wchar_t* format, ...)
{
va_list args;
va_start(args, format);
wchar_t *w = NULL;
int len = _vsnwprintf(NULL, 0, format, args) + 1; // <------ Error
if (len > 0)
{
w = new wchar_t[len];
w[0] = 0;
_vsnwprintf_s(w, len, len, format, args);
}
va_end(args);
return w;
}
如果 _CRT_SECURE_NO_WARNINGS
被打开,上面的代码工作,如果没有,错误说:
'_vsnwprintf': This function or variable may be unsafe. Consider using _vsnwprintf_s instead.
但我无法设法使用 _vsnwprintf_s
来计算 wchar 缓冲区所需的大小。
以下是我的尝试:
int len = _vsnwprintf_s(NULL, 0, 0, format, args); // return 1
// debug assertion failed: string != NULL && DstSizeInWords > 0
int len = _vsnwprintf_s(NULL, 0, INT_MAX, format, args);
// debug assertion failed: string != NULL && DstSizeInWords > 0
int len = _vsnwprintf_s(NULL, INT_MAX, 0, format, args);
// debug assertion failed: string != NULL && DstSizeInWords > 0
int len = _vsnwprintf_s(NULL, INT_MAX, INT_MAX, format, args);
其他功能:_snwprintf
报_CRT_SECURE
错误,_snwprintf_s
与_vsnwprintf_s
效果相同
虽然我对 _CRT_SECURE_NO_WARNINGS
开启非常满意,但我想知道如何计算格式化 wchar 数组所需的大小,CRT_SECURE
方式?请注意,它必须接受 va_list
作为参数。
最佳答案
您应该能够使用 _vscwprintf
获得所需的缓冲区大小:
_Check_return_ _Ret_z_ wchar_t *
Format(_Printf_format_string_ _In_z_ wchar_t const * const psz_format, ...)
{
size_t formatted_string_length;
va_list args;
{
va_start(args, psz_format);
int const result(::_vscwprintf(psz_format, args));
va_end(args);
if(-1 == result)
{
::abort();
}
assert(0 <= result);
formatted_string_length = static_cast< size_t >(result);
}
size_t const buffer_size(formatted_string_length + 1u);
wchar_t * const p_buffer(new wchar_t[buffer_size]);
{
va_start(args, psz_format);
int const result(::_vsnwprintf_s(p_buffer, buffer_size, formatted_string_length, psz_format, args));
va_end(args);
if(-1 == result)
{
::abort();
}
assert(0 <= result);
assert(static_cast< size_t >(result) == formatted_string_length);
assert(L'\0' == p_buffer[formatted_string_length]);
}
return p_buffer;
}
关于c++ - 如何计算格式化wchar数组所需的大小, `CRT_SECURE`方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142136/
我正在编写一个代码,我想在其中迭代字符串数组。但有时我可能只需要迭代一个字符串,而该字符串的形式为 WCHAR[256] 现在问题是如何将 WCHAR[256] 视为 LPCWSTR* 以便我不必处理
我有一个需要 WCHAR** 的方法,我需要从这个方法中取回一些数据。我正在声明一个数组 WCHAR[100] 并将其传递给函数。编译器抛出此错误: WCHAR result[100]; UINT i
我正在尝试修改 amcap,它是 Windows SDK 示例中的一个应用程序,用于从分辨率为 1600x1200 像素的 UVC 网络摄像头捕获视频。 我试图在这里对一些变量进行硬编码,例如文件名、
前几天,我被告知(在 stackoverflow 上!)因为我没有使用 vector 而不是动态分配的 wchar 数组。 所以我研究了使用这种字符串操作方法,因为它似乎是防止可能的内存泄漏的好主意。
@pmr:看下面的代码 @singeroftheall:我对这两件事都有问题。插入和搜索。我认为搜索部分已经完成。现在如何在 vector 中插入我的 mac 地址?我的地址保存在变量 m_devic
我正在使用Windows功能CreateToolhelp32snapshot枚举我的机器上正在运行的进程。 pe32.szeFileName它返回的字段是 WCHAR ,这是可执行文件的名称。 我想将
我想连接一个 std::string 和 WCHAR*,结果应该在 WCHAR* 中。 我试过下面的代码 size_t needed = ::mbstowcs(NULL,&input[0],input
是否有类似的 C/C++11 函数 whcar_t* source,destiantion; int location; copy(source,destination,location,partOf
我需要制作和WCHAR。但它不起作用,而且我总是收到错误: Error C2440 'initializing': cannot convert from 'const wchar_t [11
Lua 有一个名为 utf8.len() 的函数,它对 const char * 进行操作,并根据文档执行以下操作: Returns the number of UTF-8 characters in
好吧,这让我发疯了...... 我正在用 C++ 开发一个 directX 游戏,我得到了一个名为 FpsString 的全局 wchar 变量,我这样声明: WCHAR * FpsString; 在
我正在做一个小项目,我必须在其中管理文件 I/O(这是我不熟悉的东西)。我使用带有 unicode 作为字符集的 WIN32 API,因此使用宽字符存储所有文件数据,程序中的所有字符串都使用 std:
我正在用 C++ 开发一个微型 Win32 应用程序。我很早以前就学过C++基础知识,所以现在我完全被C++中的字符串搞糊涂了。没有 WCHAR 或 TCHAR 只有 char 和 String。经过
我只是不明白,也找不到太多关于 wchar end 的信息。 如果它以单个空字节结尾,如果像“009A”这样的东西代表一个 unicode 符号,它怎么知道它还没有结束? 如果它以两个空字节结尾?好吧
所以我想向注册表添加一个字符串,因为注册表字符串以 NULL 结尾,我的字符串在各个地方都包含一个空字符。 这是我的字符串的样子。 char names[550] = "1DFA-3327-*\01D
我在预处理器宏中定义了一个组合文字常量,例如 #define A "1" #define B "3" #define VERSION A "." B 最终我想稍后使用 _T 宏将其转换为 wchar_
我有一个问题,有时在字符串末尾我会得到很多?????????我不知道如何解决这个问题,而不是得到那些垃圾。 。 . USHORT length = (USHORT)d.GetLength(); if
我有一个 wchar 类型的变量(szDrive),现在我想要一个数组,它的元素的类型为 wchar。这是我的一些代码: typedef struct array_wchar{ WCHAR array
我有一个 WCHAR[] 数组。我怎样才能加入他们? 我知道数组长度。 [L"foo", L"bar"] => "foo, bar" 最佳答案 遍历这些字符串并将它们添加到 std::wstring:
我想创建一个函数来为数组分配内存。假设我有这个: PWSTR theStrings[] = { L"one", L"two", L"three" }; void foo(PWSTR a, int b)
我是一名优秀的程序员,十分优秀!