hur.cn - 华软网

 热门搜索

CString转化char[]

  作者:未知    来源:网络    更新时间:2011/5/23
程序如下:

CString str;
CFile file;
char filename[100];
file.Open("config.cpp", CFile::modeRead);
str = file.GetFileName();

问题是CFile类中GetFileName函数返回的文件名config.cpp是CString类型,想把文件名存储在数组char filename[100]中,请教大家该如转换?谢谢
---华软 网友回答---
lstrcopy(filename, str.GetBuffer(0));
---华软网友回复---
最好根据路径长度动态申请大小。。

C++">CString str;
CFile file;
file.Open("config.cpp", CFile::modeRead);
str = file.GetFileName();

int iNum  = WideCharToMultiByte(CP_OEMCP, NULL, str.GetBuffer(0), -1, NULL, 0, NULL, FALSE);

char* pFileName = new char[iNum];

if( !pFileName )
delete[] pFileName;

WideCharToMultiByte(CP_OEMCP, NULL, str.GetBuffer(0), -1, pFileName, iNum, NULL, FALSE);

// ......

delete[] pFileName;

---华软网友回复---
sprintf(filename,"%s",str);
---华软网友回复---
引用 1 楼 honyon 的回复:
lstrcopy(filename, str.GetBuffer(0));

不好意思,错了,应该是lstrcpy(filename, str.GetBuffer(0));
---华软网友回复---
引用 2 楼 hbxstone99 的回复:
最好根据路径长度动态申请大小。。

C/C++ code
CString str;
CFile file;
file.Open("config.cpp", CFile::modeRead);
str = file.GetFileName();

int iNum  = WideCharToMultiByte(CP_OEMCP, NULL, str.GetBuffer(0), -1, NUL……

如果你用到了unicode   就用上面这种方法。
如果没有    就直接memcyp(filename,str,str.GetLength());
---华软网友回复---
你的是多字节编码环境,直接这样就可以了
sprintf(filename, "%s", str);

---华软网友回复---
sprintf就行了,不过你的数组100太小了,至少要定义为MAX_PATH
---华软网友回复---
没有使用UNICODE,直接这样:
char *pStr = (LPSTR)(LPCTSTR)str;
---华软网友回复---
引用 3 楼 king_hhuang 的回复:
sprintf(filename,"%s",str);

如果GetBuffer的话还有ReleaseBuffer
上面的操作最方便
---华软网友回复---
谢谢各位了,学习一下
---华软网友回复---
filename = str.GetBuffer(filename.GetLength());
str.ReleaseBuffer();
---华软网友回复---
filename = str.GetBuffer(0);
str.ReleaseBuffer();
---华软网友回复---
我都是用GetBuffer()的。

---华软网友回复---
GetBuffer()
ReleaseBuffer()

最方便.
---华软网友回复---
filename = str.GetBuffer(0);
str.ReleaseBuffer();
---华软网友回复---
ZeroMemory(filename,100);
CopyMemory(filename,str,str.GetLengh());
---华软网友回复---
LPCTSTR
---华软网友回复---
LPCSTR pszNonUnicode;
       CString strUnicode;
       USES_CONVERSION;    
       pszNonUnicode = W2A( strUnicode.LockBuffer( ) );

       strUnicode.UnlockBuffer( );

这个肯定在VS2008下可以
---华软网友回复---
谢谢各位帮助,问题已解决
---华软网友回复---
(LPCSTR)(LPSTR)      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。