【问题标题】:Converting CString to type char?将 CString 转换为 char 类型?
【发布时间】:2015-05-14 22:46:20
【问题描述】:

我知道这对专家来说可能是一个愚蠢的问题,但我只是想知道是否可以在调用时将 CString 类型的变量传递给下面声明的函数?

void LoadFile(char * szFileName);

出现以下错误:'LoadFile' : cannot convert parameter 1 from 'class CString' to 'char *'...

我可以以某种方式转换字符串吗?

谢谢你们的cmets...

【问题讨论】:

标签: c++


【解决方案1】:

使用GetBuffer成员函数,它返回LPSTR...

https://msdn.microsoft.com/en-us/library/aa315043%28v=vs.60%29.aspx

【讨论】:

  • GetBuffer() 返回 LPTSTR(注意 T)。
  • 是的,但是LPTSTR的定义取决于UNICODE是否被定义
  • 没错。当UNICODE 被定义时,它是一个ẁchar_t *,它不会转换为char *。正如乔在上面的答案中指出的那样,问题实际上更多在于LoadFile() 的签名。
【解决方案2】:

您的编译器会准确地告诉您哪里出了问题。您正在传递一个自定义对象 CString 并且您正在调用的函数需要一个 c 样式的字符串(带有空终止符的 char *)。

您需要访问 CString 类正在包装的 c 样式字符串。您可以在 MSDN 文档页面 here 找到更多信息。

只需将您的论点转换为 LPCSTR

CString file("somefile.txt");
LoadFile((LPCSTR)file);

【讨论】:

    【解决方案3】:

    弗雷迪的回答几乎是正确的。问题实际上出在 LoadFile() 的签名中。它可能不应该采用 char* 参数。它可能应该采用 const char* 参数。您是否打算将传入的字符串修改为 LoadFile()?如果不是,如果源在您的控制之下,并且您不会破坏太多东西,则将其设为 const。

    实际上,您必须这样做:

    CString filename("somefile.txt");
    LoadFile((LPSTR)(LPCSTR) filename); // need the extra cast to (LPSTR)
    

    LoadFile((LPSTR) filename.GetString()); 
    

    这一切都假设您不是为 Unicode 构建的。如果您正在为 Unicode 构建,那将是不同的。

    如果您是为 Unicode 构建的,我会将函数签名更改为:

    void LoadFile(LPCTSTR szFileName); // LPCTSTR == const TCHAR* (TCHAR is char for MBCS and wchar_t for Unicode)
    

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 2020-06-12
      • 2010-10-25
      • 1970-01-01
      • 2012-09-17
      • 2015-07-03
      • 2020-04-11
      • 2011-11-02
      相关资源
      最近更新 更多