【问题标题】:Converting TCHAR to string in C++在 C++ 中将 TCHAR 转换为字符串
【发布时间】:2011-05-15 03:34:12
【问题描述】:

我正在尝试将 TCHAR 转换为字符串,如下所示:

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

我需要将mypath 设置为path。我做了一个简单的循环并将path[index] 连接到mypath,这可行,但我不喜欢这种方式。

我是 C++ 新手,但我已经做过很多 C#。我见过GetModuleFileName 的例子,它传入一个“char”,但它不喜欢它。它需要TCHARLPWSTR

【问题讨论】:

    标签: c++ tchar


    【解决方案1】:

    TCHAR 是定义为 char 或 wchar 的宏,具体取决于您将字符集定义为什么。 2008 年之后的默认设置是字符集为 unicode。如果您更改字符集,此代码将有效。

    int _tmain(int argc, _TCHAR* argv[])
    {
        TCHAR* bob ="hi";
        string s = bob;    
    }
    

    在项目设置上右击,查看以下内容

    如果您想使用 TCHAR 作为 Unicode 字符集,请使用 wstring

    【讨论】:

    • 更好的是,在TCHAR 上定义一个typedef:typedef std::basic_string<TCHAR> tstring; 并在任何地方使用tstring
    • 感谢您的帮助。设置上面的字符集有效。现在我可以在 GetModuleFileName 方法中使用 char 类型了。
    • 这给了我错误a value of type "const char *" cannot be used to initialize an entity of type "TCHAR *"
    • @ThisClark 是 TCHAR 定义的。这适用于 VS2013 和 2015。TCHAR 在 tchar.h 中定义,如果不包括在内,这当然不起作用。
    • 你是唯一的唯一。谁真正指出了 TCHAR 的真正痛苦。哇,答案很好。
    【解决方案2】:

    当我真的需要这样做时,我会使用以下方法:

    TCHAR  infoBuf[32767];
    GetWindowsDirectory(infoBuf, 32767);
    

    然后我把它转换成一个 wstring 可以转换成一个标准的std::string:

    wstring test(&infoBuf[0]); //convert to wstring
    string test2(test.begin(), test.end()); //and convert to string.
    

    【讨论】:

      【解决方案3】:

      如果您想要 chars 中的路径,您应该调用GetModuleFilenameA。该函数采用LPSTR 而不是LPTSTR

      请注意,几乎所有接受或返回字符串的 Win32 函数都有两个版本,一个以A(ANSI?)结尾,另一个以W(宽)结尾。

      【讨论】:

        【解决方案4】:

        您还可以使用wcstombswcstombs_s 函数将_TCHAR* 转换为char*

        http://msdn.microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx

        【讨论】:

          【解决方案5】:

          嗨,这是一个迟到的答案,但我有一个想法。

          {wstring test = User;
           std::wcout << test << std::endl;
           string test2(test.begin(), test.end());
           std::cout << test2 << std::endl;}
          

          在此示例中,用户是TCHAR 形式的用户名。 现在我可以将名称用作stringwstring。 这是将TCHAR 转换为string 的最简单方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-02
            • 2020-02-20
            • 1970-01-01
            • 2023-03-28
            • 1970-01-01
            • 2011-02-03
            相关资源
            最近更新 更多