MFC中关于CString和char*之间的问题,为什么都是不成功?

w758493 2010-01-29 02:25:35
CString strfilename;
char* path;
CFileDialog filedlg(1,0, 0, 4|2,_T("mp3音乐文件|*.mp3||"),0,0, 1);
if(filedlg.DoModal() == IDOK)
{
strfilename = filedlg.GetPathName();
path = (LPSTR)(LPCTSTR)strfilename;
FILE* fp = fopen(path,"r");
CString tmp;
tmp.Format(L"文件为[%s],fp的值为%d",path,fp);
AfxMessageBox(tmp,MB_OK);

}
...全文
186 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
magic7004 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 w758493 的回复:]
呵呵,FILE* fp是个指针当然可以%d。。不是CFileDialog的问题,最后一个参数表示是否使用vista界面的文件选择框。。正如stjay所说,可以用FILE* fp = _tfopen(strpath,_T("r"));这样就正确了,我是用的这种方法...
[/Quote]

我的vs2005里面,把CFileDialog的最后一个参数去掉,其他不变可以运行的。
hzy694358 2010-01-31
  • 打赏
  • 举报
回复
错误
GetBuffer()返回的是TCHAR
——————————————

GetBuffer()可行

rambo_ghaip 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 icyplayer 的回复:]
既然是Unicode,就不能用char*, 要用WCHAR*,或者LPTSTR
[/Quote]

这才是真正的原因.
w758493 2010-01-31
  • 打赏
  • 举报
回复
呵呵,FILE* fp是个指针当然可以%d。。不是CFileDialog的问题,最后一个参数表示是否使用vista界面的文件选择框。。正如stjay所说,可以用FILE* fp = _tfopen(strpath,_T("r"));这样就正确了,我是用的这种方法...
青稞 2010-01-31
  • 打赏
  • 举报
回复
TCHAR会自动转的,当为ANSIC的时候,是char,UNICODE的时候是wchar
crystal_dark 2010-01-31
  • 打赏
  • 举报
回复
学习
zealand_1 2010-01-29
  • 打赏
  • 举报
回复
学习了
stjay 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 harry330 的回复:]
引用 2 楼 happyparrot 的回复:
path = (LPSTR)(LPCTSTR)strfilename;
改为path = strfilename.GetBuffer();


正解。
[/Quote]

错误
GetBuffer()返回的是TCHAR

如果硬要char *path;
USES_CONVERSION;
path = T2A(strfilename);
FILE* fp = fopen(path,"r");

或者用_tfopen
FILE* fp = _topen(strfilename,_T("r"));
IcyPlayer 2010-01-29
  • 打赏
  • 举报
回复
既然是Unicode,就不能用char*, 要用WCHAR*,或者LPTSTR
zhourenyun 2010-01-29
  • 打赏
  • 举报
回复
path = (LPSTR)(LPCTSTR)strfilename;
改为path = strfilename.GetBuffer();
==========
学习了

试试这样可以不
path = (char *)(LPCTSTR)strfilename;

magic7004 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sb3day 的回复:]
fp是FILE,怎么能Format成%d???
[/Quote]

FILE*当然可以Format成%d的啊。
dong918 2010-01-29
  • 打赏
  • 举报
回复
可以强制转换fp
harry330 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyparrot 的回复:]
path = (LPSTR)(LPCTSTR)strfilename;
改为path = strfilename.GetBuffer();
[/Quote]

正解。
bowfnfje 2010-01-29
  • 打赏
  • 举报
回复
sb3day 2010-01-29
  • 打赏
  • 举报
回复
fp是FILE,怎么能Format成%d???
magic7004 2010-01-29
  • 打赏
  • 举报
回复
楼主,你的CFileDialog类的构造函数多了一个参数。
CFileDialog filedlg(1,0, 0, 4|2,_T("mp3音乐文件|*.mp3||"),0,0, 1);
改成
CFileDialog filedlg(1,0, 0, 4|2,_T("mp3音乐文件|*.mp3||"),0,0);
就好了
快乐鹦鹉 2010-01-29
  • 打赏
  • 举报
回复
path = (LPSTR)(LPCTSTR)strfilename;
改为path = strfilename.GetBuffer();
c_s0001 2010-01-29
  • 打赏
  • 举报
回复
tmp.Format(L"文件为[%s],fp的值为%d",path,fp); 中的fp不是一个值

1,660

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧