使用 C++ 时如何从 _TCHAR * 转换为 char *可变长度参数?
我们需要将格式 _TCHAR * 字符串和一些 char * 字符串传递到具有可变长度参数的函数中:
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
因此可以像这样调用:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
显然,一个简单的修复方法是使用 _TCHAR 而不是 char,但我们不这样做不幸的是没有那么奢侈。
我们需要将其与 va_start 等一起使用,以便我们可以格式化字符串:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
不幸的是,我们不能使用它,因为它给了我们这个错误:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
我想我们需要将 char * 转换为 _TCHAR * - 但如何呢?
We need to pass a format _TCHAR * string, and a number of char * strings into a function with variable-length args:
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
So it can be called like so:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Obviously a simple fix would be to use _TCHAR instead of char, but we don't have that luxury unfortunately.
We need to use this with va_start, etc so we can format a string:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Unfortunately we cannot use this because it give us this error:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
I'm thinking we need to convert our char * to _TCHAR * - but how?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 %hs 或 %hS 代替 %s。这将强制参数在 printf() 样式函数的 Ansi 和 Unicode 版本中被解释为 char*,即:
Use %hs or %hS instead of %s. That will force the parameters to be interpretted as char* in both Ansi and Unicode versions of printf()-style functions, ie:
通常它看起来像下面这样:
你的问题不完全清楚。你的功能是如何实现的以及如何使用它?
Usually it looks like the following:
Your question is not completely clear. How your function is implemented and how do you use it?
这是我的解决方案 - 欢迎提出改进建议!
Here was my solution - I welcome suggestions for improvement!
这是我之前用来将 TCHAR 转换为 char 的方法,希望它有所帮助,尽管我并不是真正在寻找优化,所以这不是最快的方法..但它有效!
this is something I have used before to convert a TCHAR to char, hope it helps, although I wasn't really looking for optimization, so it's not the fastest way.. but it worked!