我从collegaue那里得到了一段时间以前编写的代码,令人困惑。 代码是:
TCHAR Curr_dir[100];
char* input_file;
DWORD a = GetCurrentDirectory(100, Curr_dir);
size_t i= wcstombs(&input_file[i], Curr_dir, 100);
问题是Curr_dir
不是wcstombs
所需的类型。
是否有任何其他函数可以执行wcstombs
对此类变量的处理?
或者转换它的方法?
答案 0 :(得分:0)
看起来你有一个曾经支持多字节和UNICODE的代码,但在停止编译为多字节(不再支持Windows 95)之后就已经衰减了。
只有定义了_UNICODE
时,此代码剪断才有意义。在这种情况下,它在预处理器之后就像这样结束:
wchar_t Curr_dir[100];
char* input_file;
unsigned long a = GetCurrentDirectoryW(100, Curr_dir);
size_t i= wcstombs(&input_file[i], Curr_dir, 100);
在这种情况下,GetCurrentDirectoryW
在Curr_dir
中返回UINCODE(宽字符串),并且由于某种原因,它被转换为多字节字符串。并且字符的类型匹配。
但如果_UNICODE
未定义,则代码会更改为以下内容:
char Curr_dir[100];
char* input_file;
unsigned long a = GetCurrentDirectoryA(100, Curr_dir);
size_t i= wcstombs(&input_file[i], Curr_dir, 100);
GetCurrentDirectoryA
现在切换到ANSI version of the API,再调用wcstombs
毫无意义。
通常MDSN文档的一个部分包含一个表,其中包含通用文本例程映射下所有版本的字符串函数(例如strcmp-wcscmp-mbscmp
)没有' _t& #39; wcstombs
的版本,因此您需要使用#ifdef _UNICODE
。
但即使可能仍然支持Win32 API的多字节版本,继续使用它们也没有意义。
更多:https://www.codeproject.com/articles/76252/what-are-tchar-wchar-lpstr-lpwstr-lpctstr-etc