VC++学习笔记(3)------- CString相关的一些问题以及LineLength()的
来源:互联网 发布:golang 引用c 编辑:程序博客网 时间:2024/06/06 03:22
先说说CString。 CString 是一种很有用的数据类型,确切的说它是个类。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。然而如果使用时不注意就会出现问题,而且很难查找问题原因。 我们完全可以将它作为字符串类型,像其他数据类型一样来使用它,它可以与char * 进行相互转化。最简单的一种是直接进行强制转化,而且并不需要强制类型转换操作符。但要注意的是CString只能强制转化为LPCTSTR,也就是常量字符串指针。这就意味着我们不能改变指针指向的内容。很多函数的参数类型都是LPTSTR,也就是字符串指针(注意与之前的向区别),如果我们想把CString转化为LPTSTR传递进去,就不能强制转化了,应该使用CString的GetBuffer方法,然后还要调用ReleaseBuffer 释放,并且在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。 (更详细地参考http://baike.baidu.com/view/998109.htm#4) 今天写了个程序,先用无参构造函数声明一个CString对象,然后在for循环中使用GetBuffer()获取CString->LPTSTR的指针传递给其他函数。运行时总是出现“程序遇到问题需要关闭”这样的错误提示,无论怎么改都是这样。一鼓作气跟踪调试,发现问题竟出现在CString对象的析构函数中。还好网上有高人也遇到了这样的问题,仔细研究一下吧。 高人指出,调用无参的构造函数声明一个CString对象,然后通过GetBuffer()传递给其他函数进行类似内容的操作,这样做的危险性在于当字符串没有被初始化的时候,CString内部指向缓冲区的指针指向的是一个随机的地址,在CString的无参构造函数调用了如下函数:
{
nLineLength = pmyRichEditCtrl->LineLength(i);
}
{
nLineLength = pmyRichEditCtrl->LineLength(pmyRichEditCtrl->LineIndex(i));
}
- VC++学习笔记(3)------- CString相关的一些问题以及LineLength()的
- vc中的CString的操作-学习笔记
- VC CString的学习
- CEdit::Linelength的用法
- MFC的 CString 学习笔记 -3
- MFC的 CString 学习笔记 -3
- hustoj相关学习资料以及一些问题的整理还有乱七八糟的东西
- VC++中CString的引用问题?
- VC++中CString类的引用问题
- VC 窗口焦点问题以及回车键,tab键的相关
- VS2005中CString的相关问题(一)
- vc CString的分割
- VC:CString的用法
- VC:CString的用法
- VC学习资料收集(3):谈新手对CString的使用
- 和字符串CString类相关的一些常用的函数
- VC相关学习笔记
- VC相关学习笔记
- 找到一个实现梦想的开始~~
- 下拉及弹出式菜单代码
- 【转】别再用中国人的方法背英语单词了,看看人家英国人
- VC++学习笔记(1)------关于Rich Edit控件
- VC++学习笔记(2)-------在VC工程中删除类
- VC++学习笔记(3)------- CString相关的一些问题以及LineLength()的
- VC++学习笔记(4)-------使用Regular Expression
- VC++学习笔记(5)——VC中ClassWizard的Parsing error
- VC++学习笔记(6)——在Visual C++中使用ADO
- VC++学习笔记(7)——在Visual C++中使用ADO(续)
- VC++学习笔记(8)——在Visual C++中使用ADO(结)
- 三道Java题,看看自己能不能作出来
- VC++学习笔记(9)——在VC中定义外部变量
- (转)直接通过ADO操作Access数据库——作者/徐景周