一个关于CFile和char的问题

lili1982623 2004-04-13 07:20:03
我遇到了一个问题
我的实现函数是Edfile(char file[],char key,char cfile[]);
而我有一个CString filename;filename 是一个文件的路径名,怎样才能把filename用到Edfile( char file[],char key,char cfile[])里
...全文
71 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2004-04-14
  • 打赏
  • 举报
回复
实在不行的话, CString str = "sdf";
char *pChar = new char[str.GetLength()];
memcpy(pChar,str,str.GetLength());总应该可以了吧。
lili1982623 2004-04-14
  • 打赏
  • 举报
回复
我是这样做的
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
char *str=filename.GetBuffer(filename.GetLength());
再用到EDfile(str,key,char cfile[])中时,我发现str的没有内容,是空的,根本就不能完成我的功能。应当要怎么办,才会使str里有内容
vollin 2004-04-14
  • 打赏
  • 举报
回复
但是GetBuffer( int nMinBufLength )里有参数,如果里面我改为文件的长度,就出错了

对啊,你只能是引用它,如果用GetBuffer(0)得到它字符串的起始地址也只能够改它已有的空间,不能改变长度。CString是一个类,它还记录有字符串的长度等内容,它为字符串分配的空间也是变化的,所以不可能通修改它所指向的字符串的内容来改变其长度。
但你可以把你修改后的值做为函数牛农对返回值再赋给CString就可以了。
w3guy 2004-04-14
  • 打赏
  • 举报
回复
Edfile(char file[],char key,char cfile[]);
改为
Edfile(LPCSTR file,char key,LPCSTR cfile);
就可以直接传CString了
Edfile(filename , ....)
legend-never-die 2004-04-14
  • 打赏
  • 举报
回复
GetBuffer重载了,可以没有参数的,取所有值
vollin 2004-04-14
  • 打赏
  • 举报
回复
GetBuffer(0)就OK啦。
快乐鹦鹉 2004-04-14
  • 打赏
  • 举报
回复
不是文件的长度,而是文件名称的长度。比如:
CString str;
int len = str.GetLength();
char* pChar = str.GetBuffer(len);
寻开心 2004-04-14
  • 打赏
  • 举报
回复
CString strString;
char *pStr;
pStr = strString.GetBuffer( strString.GetLength());
pStr .....
strString.ReleaseBuffer();
寻开心 2004-04-14
  • 打赏
  • 举报
回复
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])却不能得到我要的结果


你能确定,上述代码执行的时候filemane里面的内容就是和CEdit当中的内容一致吗?
怀疑你没有UpdateData或者没有用GetDlgItem(idc_edit)->GetWindowText这样的方式得到真正的编辑控件内的字符串内容
1HelloWorld 2004-04-14
  • 打赏
  • 举报
回复
把你调用EDfile前的str打印出来看看,
是不是路径错误?
还有d:\vc\m1.txt应该是d:\\vc\\m1.txt吧?
lili1982623 2004-04-14
  • 打赏
  • 举报
回复
我都不好意思再说了,还达不到我的目的
为什么我这样却可以呢
CString filename="d:\vc\m1.txt";
char* str;
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])就能得到我要的结果
如果按下面
CString filename是从一个Edit box控件(映射了一个变量CString m_path)的内容(内容为文件的路径)
filename=m_path;//即得到了文件的完整路径名
str=(LPSTR)(LPCTSTR)filename;
执行EDfile(str,key,char cfile[])却不能得到我要的结果


lili1982623 2004-04-13
  • 打赏
  • 举报
回复
但是GetBuffer( int nMinBufLength )里有参数,如果里面我改为文件的长度,就出错了
快乐鹦鹉 2004-04-13
  • 打赏
  • 举报
回复
GetBuffer返回就是char*类型了
寻开心 2004-04-13
  • 打赏
  • 举报
回复
char * pStr = fileName.GetBuffer();
EDfile(...)
fileName.ReleaseBuffer();
lili1982623 2004-04-13
  • 打赏
  • 举报
回复
怎么样把filename 代替char file[]

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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