C++

静态数据成员在类声明中声明,在包含类方法的文件中定义(初始化),初始化时采用作用域操作符::来指出静态成员所属的类。但如果静态成员的类型是整型或枚举类型const,则可以在类声明中初始化。

sprintf_s是sprintf的安全版本,指定缓冲区大小来避免sprintf的溢出风险。

int sprintf_s(char *buffer, size_t sizeOfBuffer, const char *format [, argument] ...);

int sprintf( char *buffer, const char *format [, argument] … );

CString为什么要用GetBuffer和ReleaseBuffer~

因为CString变量是可变长度的,动态分配内存~所以~

对一个CString变量,你可以使用的唯一合法转换符是LPCTSTR,直接转换成非常量指针(LPTSTR-[const] char*)是错误的。正确的得到一个指向缓冲区的非常量指针的方法是调用GetBuffer()方法。

GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可以实现长度自适应增长的功能。

CString ::GetBuffer有两个重载版本:

LPTSTR GetBuffer( );LPTSTR GetBuffer(int nMinBufferLength);

在第二个版本中,当设定的长度小于原字符串长度时,nMinBufLength = nOldLen,该参数会被忽略,不分配内存,指向原CString;当设定的长度大于原字符串本身的长度时就要重新分配(reallocate)一块比较大的空间出来。而调用第一个版本时,应如通过传入0来调用第二个版本一样。

在ReleaseBuffer之前调用GetLength方法是不对的~

posted on 2011-07-14 22:27  huqian  阅读(236)  评论(0编辑  收藏  举报

导航