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方法是不对的~