You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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*)输入,必须先完成宽字符→多字节字符串的转换,步骤如下:

  1. 计算转换所需的缓冲区大小
    调用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

  2. 分配多字节缓冲区
    根据计算出的大小分配内存:

    char* mbStr = new char[mbBufferSize];
    
  3. 执行转换
    再次调用WideCharToMultiByte完成实际转换:

    WideCharToMultiByte(CP_UTF8, 0, buffer, -1, mbStr, mbBufferSize, nullptr, nullptr);
    
  4. 写入文件
    将转换后的char*传入fprintf:

    fprintf(pFile, "%s\n", mbStr);
    
  5. 清理内存
    手动释放缓冲区避免泄漏:

    delete[] mbStr;
    

替代方案(若允许偏离fprintf)

如果项目对fprintf的要求不是绝对刚性,可直接使用宽字符版本的fwprintf,无需转换:

fwprintf(pFile, L"%ls\n", buffer);

内容的提问来源于stack exchange,提问作者todel23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:32:52