将CString转换为char类型?

时间:2015-03-12 16:43:00

标签: c++

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

void LoadFile(char * szFileName);

发生以下错误:' LoadFile' :无法从'类CString'转换参数1到' char *' ...

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

谢谢您的评论......

3 个答案:

答案 0 :(得分:2)

弗雷迪的答案几乎是正确的。问题实际上在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)

答案 1 :(得分:1)

您的编译器正在告诉您究竟出了什么问题。您正在传递自定义对象CString,而您正在调用的函数正在使用c样式的字符串(带有空终止符的char *)。

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

简单地将您的论点转换为LPCSTR

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

答案 2 :(得分:0)

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

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