将 CString 转换为字符类型

Converting CString to type char?

本文关键字:字符 类型 转换 CString      更新时间:2023-10-16

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

void LoadFile(char * szFileName);

发生以下错误:"加载文件":无法将参数 1 从"类 CString"转换为"字符 *"...

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

感谢您的评论...

弗雷迪的回答几乎是正确的。 问题实际上出在 LoadFile() 的签名上。 它可能不应该采用字符*参数。 它可能应该采用一个常量字符*参数。 您是否打算将传入的字符串修改为 LoadFile()? 如果没有,如果源头在你的控制之下,并且如果你不会破坏太多东西,那就让它变得足够了。

实际上,您必须这样做:

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)

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

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

只需将您的论点视为LPCSTR.

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

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

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