MSDN的说明: LPCSTR A 32-bit pointer to a constant character string. LPSTR A 32-bit pointer to a character string. LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. LPTSTR A 32-bit pointer to a character string that is portable for Unicode and DBCS.
to : sailor_2002(我心依旧) psz指向的是一个常量,但是psz本身不是一个常量,是可以被修改的,所以psz="bbb",是合法的。
2. =
3. XX.Format("%s",..);
以下用法是常用的:
CString str_1 = "aaa";
char Buf_1[1000] = "bbb";
char *Buf_2 = "ccc"; // 相当于char Buf[4] = "ccc";
CString str_2 = Buf_1;
CString str_3 = Buf_2;
strcpy(psz, "hello");
*psz = 'b';初始化时赋值,psz指向一字符串常量,其值不能改变
char *psz = "hello";
*psz = 'y';//errorCString 可以将一字符串常量,或数组赋给他,它会自动分配空间;
CString str = "hello";
char array[100];
strcpy(array, "hello");
str = array;
另外,char* 可以赋给CString
还有 char* = CString.GetBuffer()
char* str -> char str2[] strcpy(str2,str); CString str ->char *str2 str2=(LPSTR)(LPCTSTR)str;
其他各类转换直接等于就好了
2:
以后可以=
上面这句话不同意。 // 初始值
char * psz = "aaa" ;
// 另外的地方
psz = "bbb" ; // 我认为是正确的 因为这里psz是一个指针,它的值是可以修改的。如果psz是一个字符数组,即
char psz[] = "aaa" ;
这样的时候,就不能在其他地方
psz = "bbb" ; // 非法
CString 可以直接赋值,比如,char aa[]="MyString";CString csMyString=aa;
CString类会给你自动构造的,多看一下基础的,C++ Primer和Thinking in C++就很好
以下用法是常用的:
CString str_1 = "aaa";
char Buf_1[1000] = "bbb";
char *Buf_2 = "ccc"; // 相当于char Buf[4] = "ccc";
CString str_2 = Buf_1;
CString str_3 = Buf_2;
psz = "bbb";
是正确的,psz是一个指针,"bbb"也是一个指针,可以赋值
psz = "bbb" ; // 完全可以。因为原来psz指向"aaa", 现在psz指向"bbb"
// 这是完全合法的。psz[0] = 'A' ; // 这个编译不会出错,但是运行就出错,因为psz指向的是一个
// 常量,不能被修改。
psz = "bbb" ; // 非法,因为,psz是一个数组的首地址,其值本身是一个常量,
// 不能被修改, 这句编译就不能通过
psz[0] = 'A' ; // 合法。所以,char * psz = "aaa" 和char psz[] = "aaa" 是有很大区别的。
其中 *psz在某些程序上相当于静态数据,可以用作返回值。
而psz[]则是动态数据,不能做为返回值。
LPCSTR和LPSTR有什么区别?
LPCSTR A 32-bit pointer to a constant character string.
LPSTR A 32-bit pointer to a character string.
LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
LPTSTR A 32-bit pointer to a character string that is portable for Unicode and DBCS.
psz指向的是一个常量,但是psz本身不是一个常量,是可以被修改的,所以psz="bbb",是合法的。
char *psz; 只是定义了一个指针,并没有分配内存,所以不能赋值;
psz = new char[10];
strcpy(psz, "hello");
*psz = 'b';
不对。
一旦定义了char* psz,就为psz分配了内存,但是这个内存里面存放的地址(因为它是指针变量,所以存放地址)没有指定,也就是说psz的值不知道是什么。就好像int i;定义时为i分配了内存,但是i的置却没有指定一样,不知道说得对否?
因为指针是const的。
程序:
void main()
{
char * pstr="aaa";
pstr="bbb";
}//passed.
void main()
{
char const * pstr="aaa";
pstr="bbb";
}//passed.
void main()
{
char * const pstr="aaa";
pstr="bbb";
}//can not passed.
}
CString str;
char * chararray;
chararray=str.GetBuffer(str.GetLength());
很方便,我就经常这么用,呵呵
2。char *psz只能在初始化时能够char *psz = "aaa"吗,以后就不能
psz = "bbb"了?
=======================================
非法,一般当char *psz还没有确定psz时候,应该char *psz = NULL;
用到的时候再new,赋值,最后delete []psz;