字符数组转CString类对象 把一个char型的数组直接转成CString类对象怎么转?char c[100];//假设里面已经有了内容CString cs = (CString *)c;这样用会不会有问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 会...因为类型不一样.你写的是指针类型...呵呵.直接就拿指针初始化CString s就可以的.VC6.0下.CString s=new CString(c); char c[100];//假设里面已经有了内容CString cs = c; // 这样是可以的注意c必须是一个字符串,也就是说必须包含'\0'。 直接 cs=c 应该就可以了. 谢谢大家,那这样可以吗?strncpy(cs.GetBuffer(),c,100); ....目标区域有足够的位置装吗?为什么写些奇怪的代码...闷...CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,而你直接获得它的buffer,来复制东西. 就会出问题的..使用CString 的方法不好吗??CString的构造函数有,CString(LPCSTR lpch, int nLength);可以指定长度..LPCSTR就是const char * ....目标区域有足够的位置装吗?为什么写些奇怪的代码...闷...CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,而你直接获得它的buffer,来复制东西. 就会出问题的..///???strncpy(cs.GetBuffer(100),c,100);这样不就有了吗?这样并不奇怪,很容易读懂. 直接CString cs = c或者CString cs(c);就可以了(推荐)。如果你非要用GetBuffer(),那么分为两种情况:1、如果只是字符串复制strcpy(cs.GetBuffer(100),c);cs.ReleaseBuffer(); //忘了这个问题就严重了2、如果是固定长度的内存复制strncpy(cs.GetBuffer(100),c,100);cs.ReleaseBuffer(100); //这样要自己指定长度。/********************************/另外VC6.0下CString s=new CString(c)这个能通过编译?VC6也太强了吧?怎么看也要CString s=*(new CString(c))才行!不过就算可以通过编译,也不要这样搞,有内存泄露! LZ问了一个我思考了很久而又老是忘记提问的问题感谢LZ!!!感谢大家!!! 回复w_anthony() 写错了.~ hehe 那当然通不过编译了.. char c[100];//假设里面已经有了内容CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00 char c[100];//假设里面已经有了内容CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00=======================================================cs从c[0]开始copy,一直到0x00出现为止。因此c的中间是可以出现0x00的。一旦0x00出现在中间,那么0x00之后的内容便被忽略。 strcpy(cs.GetBuffer(100),c);//cs内容随后保持不变的话,不用调用ReleaseBuffer()cs.ReleaseBuffer(); 直接用=就行了,CString重载了=运算符 创建线程的数量问题 如何创建一个有共享数据的DLL,以及如何将一个应用程序中的变量值存到DLL中的共享数据段中的变量中~~ 各位前辈解答一下,关于com聚合的问题。 工作问题,急需要高手的指点 哪里有Windows下录音的程序 那位大虾知道如何链接dbase5数据库????? QQ的协同播放影片的功能是怎样实现的呢? 把bmp压缩成jpeg后,如何写个程序计算其均方误差从而求psnr值? 请问该如何理解“映射”? 请问用哪个函数可以知道某段程序的执行时间??? 如何以VARIANT*返回一个COM指针?????急!!!!!!!!!!!! opengl显示图像的问题
因为类型不一样.你写的是指针类型...呵呵.直接就拿指针初始化CString s就可以的.
VC6.0下.
CString s=new CString(c);
CString cs = c; // 这样是可以的注意c必须是一个字符串,也就是说必须包含'\0'。
目标区域有足够的位置装吗?
为什么写些奇怪的代码...闷...
CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,
而你直接获得它的buffer,来复制东西. 就会出问题的..使用CString 的方法不好吗??
CString的构造函数有,
CString(LPCSTR lpch, int nLength);可以指定长度..
LPCSTR就是const char *
目标区域有足够的位置装吗?
为什么写些奇怪的代码...闷...
CString 是可变长的,但那是说你通过它的方法来访问,它帮你实现变长,
而你直接获得它的buffer,来复制东西. 就会出问题的..///???
strncpy(cs.GetBuffer(100),c,100);这样不就有了吗?这样并不奇怪,很容易读懂.
如果你非要用GetBuffer(),那么分为两种情况:
1、如果只是字符串复制
strcpy(cs.GetBuffer(100),c);
cs.ReleaseBuffer(); //忘了这个问题就严重了
2、如果是固定长度的内存复制
strncpy(cs.GetBuffer(100),c,100);
cs.ReleaseBuffer(100); //这样要自己指定长度。/********************************/
另外VC6.0下CString s=new CString(c)这个能通过编译?
VC6也太强了吧?怎么看也要CString s=*(new CString(c))才行!
不过就算可以通过编译,也不要这样搞,有内存泄露!
感谢LZ!!!
感谢大家!!!
~ hehe 那当然通不过编译了..
CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00
CString cs = c; // 这样是可以的c的中间不能出现 0x00字符 最后一个必须为 0x00
=======================================================
cs从c[0]开始copy,一直到0x00出现为止。因此c的中间是可以出现0x00的。一旦0x00出现在中间,那么0x00之后的内容便被忽略。
//cs内容随后保持不变的话,不用调用ReleaseBuffer()
cs.ReleaseBuffer();