CString的零星知识总结

示例

CString s("abcd"); 
CString s1("123456");
CString s2("a1b2c3");
int i = s.GetLength(); 
printf("%S\n", s); 
printf("s length1 is %d\n", i);

LPTSTR p = s.GetBuffer(6); 
lstrcpy(p, s1);

printf("%S\n", s); 
int j = s.GetLength(); 
printf("s length2 is %d\n", j);
	
s.ReleaseBuffer(); 
printf("%S\n", s);
int k = s.GetLength(); 
printf("s length3 is %d\n", k);

lstrcpy(p, s2);     //这里新指定的字串若为"a1b2c3e"则会在此中断
printf("%S\n", s); 
int m = s.GetLength(); 
printf("s length4 is %d\n", m);

结果:

在这里插入图片描述

几点说明:

(1)在非MFC工程使用CString需要添加:
#define _AFXDLL
#include <afx.h>
#include <windows.h>

(2)向控制台printf CString 类型时采用 %S;

(3)CString::GetBuffer(nMinBufLength ) 的返回值是一个指向对象的(以空字符结尾的)字符缓冲区的LPTSTR指针。 参数nMinBufLength 字符缓冲区的以字符数表示的最小容量。这个值不包括一个结尾的空字符的空间。
此成员函数返回一个指向CString对象的内部字符缓冲区的指针。返回的LPTSTR不是const,因此可以允许直接修改CString的内容。 如果你使用由GetBuffer返回的指针来改变字符串的内容,你必须在使用其它的CString成员函数之前调用ReleaseBuffer函数。 在调用ReleaseBuffer之后,由GetBuffer返回的地址也许就无效了,因为其它的CString操作可能会导致CString缓冲区被重新分配。 如果你没有改变此CString的长度,则缓冲区不会被重新分配。 当此CString对象被销毁时,其缓冲区内存将被自动释放。

(4)ReleaseBuffer的作用是更新字符串的长度。 CString内,GetLength获取字符串长度并不是动态计算的,而是在赋值操作后计算并保存在一个int变量内的,当通过GetBuffer直接修改CString时,那个int变量并不可能自动更新,于是便有了ReleaseBuffer.

(5)strcpy是C运行时函数,是标准C提供的函数,lstrcpy是Windows API,后者可以用于通过指针copy给CString赋值;

发布了37 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xu_fengyu/article/details/82987965
今日推荐