如何将LPTSTR转换为const char*?适配GetDlgItemText与fprintf场景
LPTSTR转fprintf兼容类型的转换方案
首先明确核心前提:LPTSTR 是 TCHAR* 的别名,实际类型完全由项目的字符集设置决定,转换逻辑分两种场景:
场景1:项目使用多字节字符集(ANSI)
此时 LPTSTR 等价于 char*,无需任何类型转换,直接将其传入fprintf即可:
TCHAR buffer[256]; GetDlgItemText(hWnd, IDC_INPUT_EDIT, buffer, 256); fprintf(pFile, "%s\n", buffer);
场景2:项目使用Unicode字符集
此时 LPTSTR 等价于 wchar_t*,而fprintf仅支持多字节(char*)输入,必须先完成宽字符→多字节字符串的转换,步骤如下:
计算转换所需的缓冲区大小
调用WideCharToMultiByte,传入0作为缓冲区大小,获取所需的多字节字符总数:TCHAR buffer[256]; GetDlgItemText(hWnd, IDC_INPUT_EDIT, buffer, 256); int mbBufferSize = WideCharToMultiByte(CP_UTF8, 0, buffer, -1, nullptr, 0, nullptr, nullptr);注:
CP_UTF8保证多语言兼容性,若需适配系统默认编码,可替换为CP_ACP分配多字节缓冲区
根据计算出的大小分配内存:char* mbStr = new char[mbBufferSize];执行转换
再次调用WideCharToMultiByte完成实际转换:WideCharToMultiByte(CP_UTF8, 0, buffer, -1, mbStr, mbBufferSize, nullptr, nullptr);写入文件
将转换后的char*传入fprintf:fprintf(pFile, "%s\n", mbStr);清理内存
手动释放缓冲区避免泄漏:delete[] mbStr;
替代方案(若允许偏离fprintf)
如果项目对fprintf的要求不是绝对刚性,可直接使用宽字符版本的fwprintf,无需转换:
fwprintf(pFile, L"%ls\n", buffer);
内容的提问来源于stack exchange,提问作者todel23
相关产品推荐
相关产品推荐

