gpt4 book ai didi

c++ - 使用 C++ 可变长度参数时如何将 _TCHAR * 转换为 char *?

转载 作者:可可西里 更新时间:2023-11-01 17:55:28 25 4
gpt4 key购买 nike

我们需要将格式 _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 * - 但是怎么做呢?

最佳答案

使用 %hs 或 %hS 代替 %s。这将强制在 Ansi 和 Unicode 版本的 printf() 样式函数中将参数解释为 char*,即:

inline void LogToFile(const _TCHAR *szFmt, ...)
{
va_list args;
TCHAR szBuf[BUFFER_MED_SIZE];

va_start(args, szFmt);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
}

{
char *foo = "foo";
char *bar = "bar";
LogToFile(_T("Test %hs %hs"), foo, bar);
}

关于c++ - 使用 C++ 可变长度参数时如何将 _TCHAR * 转换为 char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1613217/

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