VC常用字符串使用说明
c语言 字符串函数

c语言字符串函数1 字符串函数C语言提供了很多处理字符串的函数,其中主要包括字符串拷贝、比较、查找、拼接等函数,可广泛应用于各类问题的解决。
下面结合实例来介绍其中三个常用的字符串函数:1.1 strcpy函数`strcpy`函数全称是string copy,是一种用于复制字符串的函数,其使用方法如下:```Cstrcpy(数组名, 字符串);```例如拷贝字符串"Hello World”到数组a中,其使用方法可以定义如下:```Cstrcpy(a, "Hello World”);```1.2 strcmp函数`strcmp`函数用于比较两个字符串的大小,其使用方法如下:```Cstrcmp(字符串1, 字符串2);```例如比较字符串“Hello World”和“Hello China”的大小,其使用方法可定义如下:```Cstrcmp("Hello World", "Hello China");```此函数会根据比较结果返回一个整数值。
若两个字符串相等,返回0;若`字符串1`大于`字符串2`则返回大于0的整数;若`字符串1`小于`字符串2`则返回小于0的整数。
1.3 strstr函数`strstr`函数用于查找字符串,其使用方法可定义如下:```Cstrstr(字符串1, 字符串2);```例如从字符串"Hello World"中查找字符串"Hello”,其使用方法可定义如下:```Cstrstr("Hello World", "Hello");```若在字符串`字符串1`中有查找到`字符串2`,此函数会返回`字符串2`在`字符串1`中的位置;若查找不到,此函数会返回`NULL`。
通过以上三个字符串函数的介绍,可以清楚地看到C语言众多字符串函数的应用,能够有效地处理操作字符串。
c字符串的几种形式

c字符串的几种形式一、C字符串的定义及基本形式C字符串是指以空字符'\0'结尾的字符数组。
在C语言中,字符串可以以以下几种形式进行定义和表示。
1.1 字符数组形式字符数组形式是最基本的表示C字符串的形式,它由一系列字符组成,以空字符结尾。
例如:```cchar str[] = "Hello World";```其中,str是一个字符数组,它包含了"Hello World"这个字符串,其中最后一个字符是空字符'\0'。
1.2 字符指针形式字符指针形式是指使用指针变量来指向字符串的首地址。
例如:```cchar *str = "Hello World";```其中,str是一个指针变量,它指向了字符串"Hello World"的首地址。
二、C字符串的操作和函数在C语言中,可以使用一系列的字符串操作函数来对字符串进行处理和操作。
下面介绍几个常用的字符串函数。
2.1 strlen函数strlen函数用于获取字符串的长度,即字符串中字符的个数,不包括结尾的空字符。
例如:```cchar str[] = "Hello World";int len = strlen(str);```其中,len的值为11,即字符串中字符的个数。
2.2 strcpy函数strcpy函数用于将一个字符串复制到另一个字符串中。
例如:```cchar src[] = "Hello";char dest[10];strcpy(dest, src);```其中,src是源字符串,dest是目标字符串。
经过strcpy函数的处理后,dest中的内容为"Hello"。
2.3 strcat函数strcat函数用于将一个字符串连接到另一个字符串的末尾。
例如:```cchar str1[] = "Hello";char str2[] = "World";strcat(str1, str2);```经过strcat函数的处理后,str1中的内容为"HelloWorld"。
C语言的常用字符串操作函数(一)

C语⾔的常⽤字符串操作函数(⼀) ⼀直做的是单⽚机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显⽰等⼯作,想提⾼下字符串操作的⽔平,⽽不是笨拙的数组替换等⽅式,翻看帖⼦发现C语⾔的字符串操作函数竟然这样丰富⽽实⽤,在此记录,已备后⽤。
No.1 strlen():字符串长度计算函数应⽤实例:1 #include<stdio.h>2 #include<string.h>34char TextBuff[] = "Hello_My_Friend!";56int main(void)7 {8 printf("TextBuff的长度是:%d\r\n",strlen(TextBuff));9 }No.2 strcpy():字符串拷贝函数应⽤实例:1 #include<stdio.h>2 #include<string.h>34char *TextBuff= "Hello_My_Friend!";5char RevBuff[13];67int main(void)8 {9 strcpy(RevBuff,TextBuff);10 printf("RevBuff:%s\r\n",RevBuff);11 }No.3 strcat():字符串拼接函数应⽤实例:1 #include<stdio.h>2 #include<string.h>34int main(void)5 {6char *TextBuff;7char *A="IamA";8char *B="IamB";9char *C="IamC";10 strcat(TextBuff,A);11 strcat(TextBuff,B);12 strcat(TextBuff,C);13 printf("TextBuff的长度是:%d\n",strlen(TextBuff));14 printf("%s\n",TextBuff);15 }No.4 strchr():字符串查找(第⼀次出现的位置)应⽤实例:1 #include<stdio.h>2 #include<string.h>34int main(void)5 {6char Text[10]="wearetheAB";7char *Ptr;8char a='a';910 Ptr=strchr(Text,a);11 printf("a的位置在Text的第%d个位置\n",Ptr-Text+1);12 }No.5 strcmp():字符串⽐较函数应⽤实例:1 #include<stdio.h>2 #include<string.h>34int main(void)5 {6char *A="Hello!";7char *B="Hello!";8char Num=0;9 Num=strcmp(A,B);10if(Num==0)11 {12 printf("两个数组相等\n");13 }14else15 {16 printf("两个数组不相等\n");17 }18 }。
VC常用数据类型的使用

关键字VC常用数据类型的使用VC常用数据类型的使用刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。
我们先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long)ltoa(l,temp,10);浮点数(float,double)用fcvt可以完成转换,这是MSDN中的例子:int decimal, sign;char *buffer;double source = 3.1415926535;buffer = _fcvt( source, 7, &decimal, &sign );运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0decimal表示小数点的位置,sign表示符号:0为正数,1为负数CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;BSTR变量BSTR bstrV alue = ::SysAllocString(L"程序员");char * buf = _com_util::ConvertBSTRToString(bstrV alue);SysFreeString(bstrV alue);AfxMessageBox(buf);delete(buf);CComBSTR变量CComBSTR bstrV ar("test");char *buf = _com_util::ConvertBSTRToString(bstrV ar.m_str); AfxMessageBox(buf);delete(buf);_bstr_t变量_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用_bstr_t bstrV ar("test");const char *buf = bstrV ar;///不要修改buf中的内容AfxMessageBox(buf);通用方法(针对非COM数据类型)用sprintf完成转换char buffer[200];char c = '1';int i = 35;long j = 1000;float f = 1.7320534f;sprintf( buffer, "%c",c);sprintf( buffer, "%d",i);sprintf( buffer, "%d",j);sprintf( buffer, "%f",f);二、字符串转换为其它数据类型strcpy(temp,"123");短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);CString变量CString name = temp;BSTR变量BSTR bstrV alue = ::SysAllocString(L"程序员");...///完成对bstrV alue的使用SysFreeString(bstrV alue);CComBSTR变量CComBSTR类型变量可以直接赋值CComBSTR bstrV ar1("test");CComBSTR bstrV ar2(temp);_bstr_t变量_bstr_t类型的变量可以直接赋值_bstr_t bstrV ar1("test");_bstr_t bstrV ar2(temp);三、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i);浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值str = username;对于Format所不支持的数据类型,可以通过上面所说的关于其它数据类型转化到char *的方法先转到char *,然后赋值给CString变量。
C语言-字符串函数大全和详解.docx

C语言-字符串函数大全和详解.txt “我羡慕内些老人羡慕他们手牵手一直走到最后。
一交话费的时候,才•发现白己的话那么值钱。
c语言字符串函数详解void *memset(void *dest, int c, size_t count);将dest前面count个字符St为字符c.返回dest的值.void *mcmmove(void *dost, const void *src, size_t count);从src复制count字节的字符到dest.如果src和dest出现重叠,函数会自动处理.返回dost的值.void *memcpy(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.与memmove功能一样,J4是不能处理src和dest岀现重叠.返回dest的值.void ^menichr (const void *buf, int c, size t count);在buf前Ifli count字节中查找首次出现字符c的位置.找到了字符c或者已经搜寻了 count 个字节,查找即停止.操作成功则返回buf中首次出现c的位置指针,否则返回NULL.void *_memccpy(void *dest, const void *src, int c, size_t count);从src复制0个或多个字节的字符到dest.当字符c被复制或者count个字符被复制时,5 制停止.如果字符c被复制,函数返回这个字符后面紧挨一个字符位置的指针.否则返回NULL.int memcmp(const void *bufl, const void *buf2, size t count);比较buf 1和buf2前面count个字节人小.返回值< 0,表示bufl小于buf2; 返回值为0,表示bufl等于buf2; 返回值〉0,表示bufl大于buf2.int memicmp(const void *bufl, const void *buf2, size t count);比较bufl和buf2前面count个字节.与memcmp不同的是,它不区分大小写. 返回值同上. size t strlen(const char *string);获取字符串长度,字符串结束符NULL不计算在内.没有返回值指示操作错误.char *strrev(char *string);将字符串string中的字符顺序颠倒过來.NULL结朿符位置不变.返冋调整后的字符串的指针.char *_strupr(char ^string);将string中所有小写字母替换成相应的大写字母,其它字符保持不变.返I叫调整后的字符串的指针.char *_strlwr(char *string);将string屮所有人写字母替换成相应的小写字母,其它字符保持不变.返凹调整后的字符串的指针.char *strchr (const char ^string, int c);查找字符c在字符串string屮百次出现的位逍,NULL结束符也包含在查找屮.返回一个指针,指向字符C在字符串string屮首次出现的位置,如杲没有找到,则返冋 NULL.char ^strrchr (const char *string, int c);查找字符c在字符串string中最后一次出现的位置,也就是対string进行反序搜索,包含NULL结束符.返回一个指针,指向字符c在字符串string中最后一次出现的位置,如果没冇找到,则返回NULL.char ^strstr (const char *string, const char *strSearch);在字符串string中查找strSearch子串.返凹子串strSearch在string中首次出现位置的指针.如果没有找到子串strSearch,则返回NULL.如果了串strSearch为空串,函数返回string值.char *strdup (const char *strSource);函数运行屮会自己调用malloc函数为复制strSource字符串分配存储空间,然示再将strSource复制到分配到的空间中.注意要及时释放这个分配的空间.返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,贝IJ返回NUI丄值.char Estreat(char *strDestination, const char ^strSource);将源串strSource添加到目标串strDestination后血,并在得到的新串后面加上NULL结朿符.源串strSource的字符会覆盖目标串strDestination后面的结束符NULL.在字符串的复制或添加过程中没有溢出检查,所以要保证目标串空间足够大.不能处理源屮与目标屮重叠的情况.函数返回strDestination值.char ^strncat(char *strDestination, const char *strSource, size t count);将源串strSource开始的count个7符添加到冃标串strDest后.源串strSource的7符会覆盖目标串strDestination后面的结束符NULL如果count大于源串长度,则会用源串的长度值替换count值.得到的新串后面会自动加上NULL结束符.与strcat函数一样,本函数不能处理源串与日标串重叠的情况.函数返 1111 strDestination 值.char *strcpy(char *strDestination, const char *strSource);复制源串strSource到D标串strDestination所指定的位置,包含NULL结束符.不能处理源串与目标串重亞的情况.函数返冋strDestination值.char ^strncpy(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符复制到日标串strDestination所指定的位置.如果 count 值小于或等于strSource串的长度,不会自动添加NULL结束符目标串中,而count大于strSource串的长度时,则将strSource用NULL结朿符填充补齐count个字符,复制到H 标串屮.不能处理源串与目标串重吾的情况.函数返冋strDestination值.char *strset(char *string, int c);将string串的所有字符设置为字符c,遇到NULL结束符停止.函数返回内容调整后的string指针.char *strnset(char *string, int c, size t count);将string串开始count个字符设置为字符c,如果count值大于string串的长度,将用 string 的长度替换count值.函数返冋内容调整麻的string指针.size_t strspn(const char ^string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外)在string串中首次岀现的位置序号.返回一个整数值,指定在string中全部由characters中的字符组成的了串的长度.如果 string 以一个不包含在strCharSet中的字符开头,函数将返回0值.size_t strcspn(const char ^string, const char *strCharSet);查找strCharSet串屮任何一个字符在string串中首次出现的位置序号,包含字符串结束符NULL.返冋一个整数值,指定在string屮全部由非characters屮的字符组成的了串的长度.如果string以一个包含在strCharSet中的字符开头,函数将返回0值.char *strspnp(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NUI丄除外)在string串中首次出现的位置指针.返回一个指针,指向非strCharSet中的字符在string中首次出现的位置.char ^strpbrk (const char *string, const char ^strCharSet);查找strCharSet串中任何一个字符在string串中首次出现的位置,不包含字符串结束符 NULL.返回一个指针,指向strCharSet '|>任一字符在string中首次出现的位置.如果两个字符串参数不含相同字符,则返回NUI丄值.int strcmp(const char *stringl, const char *string2);比较字符串string!和string2大小.返回值< 0,表示stringl小于string2;返回值为0,表示stringl等于string2;返回值〉0,表示stringl大于string2.int stricmp(const char ^stringl, const char *string2);比较字符串stringl和string2大小,和strcmp不同,比较的是它们的小写字母版本.返回值与strcmp相同.int strcmpi(const char *stringl, const char *string2);等价于stricmp函数只是提供一个向后兼容的版木.int strncmp(const char *stringl, const char *string2, size t count);比较字符串stringl和string2人小,只比较前[ftf count个字符.比较过程屮,任何一个字符串的氏度小于count,则count将被较短的字符串的长度取代.此时如果两串前面的字符都相等,则较短的串耍小.返回值〈0,表示stringl的子串小于string2的子串;返回值为0,表示stringl的子串等于string2的子串;返回值〉0,表示stringl的了串大于string2的了串.int strnicmp(const char *stringl, const char *string2, size_t count);比较字符串stringl和string2大小,只比较前面count个字符.与strncmp不同的是,比较的是它们的小写字母版本.返凹值与strncmp相同.char *strtok(char *strToken, const char *strDelimit);在strToken串屮查找F—个标记,strDelimit字符集则指定了在当前查找调用中可能遇到的分界符.返回一个指针,指向在strToken中找到的下一个标记.如果找不到标记,就返回NULL值. 每次调用都会修改strToken内容,用NULL字符替换遇到的每个分界符.本文来自 CSDN 博客,转载请标明出处:http://blog. csdn.net/wul1y_happy/archive/2008/03/25/2216575.aspx。
c语言中string的用法

c语言中string的用法在C语言中,字符串(string)是一组字符的序列,以null字符('\0')结尾。
字符串在实际编程中非常常见,因此了解如何使用字符串是至关重要的。
首先,我们可以使用字符数组来表示和处理字符串。
例如,我们可以声明一个字符数组来存储一个字符串:```cchar str[50] = "Hello, World!";```在上述例子中,我们声明了一个名为`str`的字符数组,大小为50,并将字符串"Hello, World!"赋值给它。
要注意的是,C语言中的字符串是以null字符('\0')结尾的,这个字符表示字符串的结束。
在声明和初始化字符数组时,编译器会自动在末尾添加null字符。
我们可以使用一个特殊的函数`strlen()`来获取字符串的长度。
该函数返回字符串中字符的数量,不包括null字符。
```cint length = strlen(str);```在上述示例中,我们将字符串`str`的长度存储在变量`length`中。
C语言中还提供了一些用于处理字符串的函数,例如`strcpy()`、`strcat()`和`strcmp()`等。
- `strcpy()`函数用于将一个字符串复制到另一个字符串中:```cchar destination[50];strcpy(destination, str);```在上述示例中,我们将`str`字符串复制到`destination`字符串中。
- `strcat()`函数用于将一个字符串附加到另一个字符串的末尾:```cchar str1[50] = "Hello, ";char str2[] = "World!";strcat(str1, str2);```在上述示例中,我们将`str2`字符串附加到`str1`字符串的末尾。
C语言中如何进行字符串操作
C语言中如何进行字符串操作第一章:字符串介绍和初始化在C语言中,字符串是一个由字符组成的字符数组。
在使用字符串操作之前,我们需要了解字符串的初始化方式。
字符串可以通过以下几种方式进行初始化:1. 使用字符数组初始化字符串:可以直接创建一个字符数组,并将字符串赋值给它。
例如:char str[10] = "hello";2. 使用字符串常量初始化字符串:可以直接使用双引号将字符串括起来并赋值给字符串变量。
例如:char str[] = "world";3. 使用指针初始化字符串:可以使用指针指向字符串常量,并将指针赋值给字符串变量。
例如:char *str = "welcome";第二章:字符串输入和输出C语言提供了多种方式进行字符串的输入和输出操作。
可以使用printf()函数输出字符串,使用scanf()函数输入字符串。
1. 输出字符串:使用printf()函数并使用%s格式控制符。
例如:char *str = "hello";printf("String: %s\n", str);2. 输入字符串:使用scanf()函数并使用%s格式控制符。
例如:char str[10];scanf("%s", str);第三章:字符串长度和拷贝在C语言中,可以使用strlen()函数获取字符串的长度,并可以使用strcpy()函数将一个字符串拷贝到另一个字符串中。
1. 获取字符串长度:使用strlen()函数可以获取字符串的长度。
例如:char str[] = "hello";int length = strlen(str);printf("Length: %d\n", length);2. 拷贝字符串:使用strcpy()函数可以将一个字符串拷贝到另一个字符串中。
VC常用命令符号规则
c:字符;by:字节;n:短整数和整数;i:整数;b:布尔型;w:无符号字;l:长整型;fn:函数指针;s:串;h:句柄;dw:无符号长整型;msg:消息lp:32位长整数指针;sz/str:以0为结束符的字符串;一般的命名规则:(1)变量命名:前缀加名字;(2)函数命名:不带前缀,函数中每一个单词得开头字母要大写;(3)类和常量:所有类和常量都是大写字母;(4)类:在名称前加一个C;(5)类得成员:一般加m_;hInstance:它是windows为该应用程序实例的一个句柄;lpCmdLine:如果应用程序命令行得形式被启动;nCmdshow:系统传入有如何打开应用程序窗口得信息;hWnd:提示框的父窗口的句柄;lpText:一个以空字符结尾的字符串指针;lpCaption:一个以空字符结尾的字符串指针;uType:该参数决定了提示框的风格类型;msg:消息结构体,用来存放消息;hAccelTable:用来存放键盘加速建表的句柄;s2Title:装入的是窗口的标题栏字符串;s2WindowClass:装入的是类名字符串;uID:资源ID;lpBuffer:存放字符串的缓冲区。
图像读取:I=imread(‘.’);显示:inshow(I);保存:imwrite(I2,’cameraman.bmp’);文件的扩展名.bmp;检查新生成文件内容:imfinfo(’cameraman.bmp’) 注意imfinfo不加;;whose:查看图像内容;imsize:改变图像大小;imwntrast手动调控制面板;figure:imshow():用figure避免覆盖;adapthstgstrel(‘disk,16):创建圆盘图形;imopen:对图像开运算,能平滑图像的轮廓,消弱狭窄得部分;imsubtrack:相减函数;graythresh:得到图像的全局阀值;imzbw:将灰度图转换为二值图;bwlabel:可以用于对二值图像进行标准;索引图像得彩色图像滤波——先转换成RGBimage(x,y,c):x,y,图像左上角坐标c显示图片;imagesc:自动标度输入数据;imhist(I,N):在长度为N的灰度条上显示I的直方图;pixval:函数用于显示图像的亮度值;im2uint8:转化成[0~255];mag2gray:转化成[0,1];im2double:若输入united8将为[0,1],若为double时输出不变。
VC++中的char,wchar_t,
VC++中的char,wchar_t,1.VC++中的char,wchar_t,TCHAR大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI 函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱。
为了统一,有必要把来龙去脉搞清楚。
为了搞清这些函数,就必须理请几种字符类型的写法。
char就不用说了,先说一些wchar_t。
wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里:typedef unsigned short wchar_t;不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t 字符串,必须使用wcs前缀的函数,例如wcscpy。
为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如:wchar_t *szT est=L"This is a Unicode string.";下面在看看TCHAR。
如果你希望同时为ANSI和Unicode编译的源代码,那就要include TChar.h。
TCHAR是定义在其中的一个宏,它视你是否定义了_UNICODE宏而定义成char或者wchar_t。
如果你使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode 的wcsXXX函数了,而必须使用TChar.h中定义的_tcsXXX函数。
另外,为了解决刚才提到带“L”的问题,TChar.h中定义了一个宏:“_TEXT”。
以strcpy函数为例子,总结一下:.如果你想使用ANSI字符串,那么请使用这一套写法:char szString[100];strcpy(szString,"test");.如果你想使用Unicode字符串,那么请使用这一套:wchar_t szString[100];wcscpyszString,L"test");.如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:TCHAR szString[100];_tcscpy(szString,_TEXT("test"));2.字符串及处理之三: 使用TCHAR系列方案使用TCHAR系列方案编写程序TCHAR是一种字符串类型,它让你在以MBCS和UNNICODE来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码。
VC字符串转数字
atoi,atol,strtod,strtol,strtoul实现类型转换atof(将字符串转换成浮点型数)相关函数atoi,atol,strtod,strtol,strtoul表头文件#include <stdlib.h>定义函数double atof(const char *nptr);函数说明atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值返回转换后的浮点型数。
附加说明atof()与使用strtod(nptr,(char**)NULL)结果相同。
atoi(将字符串转换成整型数)相关函数atof,atol,atrtod,strtol,strtoul表头文件#include<stdlib.h>定义函数int atoi(const char *nptr);函数说明atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
返回值返回转换后的整型数。
附加说明atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。
atol(将字符串转换成长整型数)相关函数atof,atoi,strtod,strtol,strtoul表头文件#include<stdlib.h>定义函数long atol(const char *nptr);函数说明atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。
返回值返回转换后的长整型数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1) char*转换成CString
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:
char chArray[] = "This is a test";
char * p = "This is a test";
或
LPSTR p = "This is a test";
或在已定义Unicode应的用程序中
TCHAR * p = _T("This is a test");
或
LPTSTR p = _T("This is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
(2) CString转换成char*
若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
方法一,使用强制转换。例如:
CString theString( "This is a test" );
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
方法二,使用strcpy。例如:
CString theString( "This is a test" );
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)
或const char* (ANSI),系统编译器将会自动对其进行转换。
方法三,使用CString::GetBuffer。例如:
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
// 在这里添加使用p的代码
if(p != NULL) *p = _T('\0');
s.ReleaseBuffer();
// 使用完后及时释放,以便能使用其它的CString成员函数
(3) BSTR转换成char*
方法一,使用ConvertBSTRToString。例如:
#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _TCHAR* argv[]){
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完释放
delete[] lpszText2;
return 0;
}
方法二,使用_bstr_t的赋值运算符重载。例如:
_bstr_t b = bstrText;
char* lpszText2 = b;
(4) char*转换成BSTR
方法一,使用SysAllocString等API函数。例如:
BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
BSTR bstrText = ::SysAllocStringByteLen("Test",4);
方法二,使用COleVariant或_variant_t。例如:
//COleVariant strVar("This is a test");
_variant_t strVar("This is a test");
BSTR bstrText = strVar.bstrVal;
方法三,使用_bstr_t,这是一种最简单的方法。例如:
BSTR bstrText = _bstr_t("This is a test");
方法四,使用CComBSTR。例如:
BSTR bstrText = CComBSTR("This is a test");
或
CComBSTR bstr("This is a test");
BSTR bstrText = bstr.m_str;
方法五,使用ConvertStringToBSTR。例如:
char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
(5) CString转换成BSTR
通常是通过使用CStringT::AllocSysString来实现。例如:
CString str("This is a test");
BSTR bstrText = str.AllocSysString();
…
SysFreeString(bstrText); // 用完释放
(6) BSTR转换成CString
一般可按下列方法进行:
BSTR bstrText = ::SysAllocString(L"Test");
CStringA str;
str.Empty();
str = bstrText;
或
CStringA str(bstrText);
(7) ANSI、Unicode和宽字符之间的转换
方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将
Unicode字符转换成ANSI字符。
方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C+
+环境中还可使用S将ANSI字符串转换成String*对象。例如:
TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”;
方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及
提供相应的类,它具有如图3所示的统一形式:
其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开
辟一定大小的缓冲。SourceType和DestinationType可以是A、T、W和OLE,其含义分别是ANSI、Unico
de、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示
例代码:
LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);