关于VC中的字符串

合集下载

VC中使用ADO的方法

VC中使用ADO的方法

VC中使⽤ADO的⽅法ADO中打开⼀个连接:pConnection->ConnectionString = "这⾥的字符串有下⾯四种写法"; //对连接字符串赋值pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库第⼆三个参数分别为⽤户的ID与密码,因为在连接字符串ConnectionCstring中已经设置好了,这⾥可以为空。

第四个参数可以取下⾯两个参数:adAsyncConnect,异步打开数据库,在ASP中直接⽤16。

adConnectUnspecified,同步打开数据库,在ASP中直接⽤-1。

ConnectionString根据不同的数据源,分别对应不同的写法(要记下来很困难,可以在VB中利⽤ADO控件先连接好,再将其拷贝在VC中,这样不容易出错) 1)访问Access 2000 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord" 2)访问ODBC数据 "Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;" 3)访问Oracle数据库 “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;" 4)访问MS SQL数据库 "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;" 使⽤ADO开发应⽤程序有两种⽅法,⼀种是直接在应⽤程序中使⽤ADO数据控件,该⽅法最简单,⽆需编写⼀⾏代码即可实现对数据库的访问,另⼀种⽅法是直接使⽤ADO对象实现对数据库的操作,该⽅法较复杂,但可以让程序员更深⼊的控制数据库。

C语言--字符串详解

C语言--字符串详解

C语⾔--字符串详解 字符串是⼀种⾮常重要的数据类型,但是C语⾔不存在显式的字符串类型,C语⾔中的字符串都以字符串常量的形式出现或存储在字符数组中。

同时,C 语⾔提供了⼀系列库函数来对操作字符串,这些库函数都包含在头⽂件 string.h 中。

⼀、字符串常量和字符数组1.1、什么是字符串常量 C 语⾔虽然没有字符串类型,但是 C语⾔提是存在字符串这个概念的,也就是字符串常量:以 NUL 字节结尾的 0 个或多个字符组成的序列。

字符串常量是不可被修改的,⼀般⽤⼀对双引号(" ")括起的⼀串字符来表⽰字符串常量,如: "Hello!"、"\aWarning!\a"、"123abc\n"、"" 字符串常量可以为空,如""就是⼀个空的字符串常量,但是即使为空,还是存在⼀个终⽌符 NUL 的。

(在 C 语⾔中,常⽤转义字符 \0来表⽰ NUL)1.2、字符串常量与指针 字符串常量与指针关系密切,因为字符串常量的值,实际上表⽰的是存储这些字符的内存空间的地址,更准确地说是字符串常量中第 1个字符的地址,⽽不是这些字符本⾝。

因此,在 C 语⾔中是不能直接进⾏字符串赋值的(因为没有字符串类型嘛)。

在 C 语⾔中,常通过声明⼀个指向 char 类型的指针并将其初始化为⼀个字符串常量的⽅式来访问⼀个字符串:char *message = "Hello World!";// 上⾯的语句也可以拆分成下⾯两句char *message;message = "Hello World!"; // 这句话看起来像是字符串复制,其实不是,只是涉及到指针操作 上述语句声明了⼀个指向 char 类型的指针,并⽤字符串常量中第 1 个字符的地址对该指针进⾏初始化。

可以通过字符指针 message 来访问字符串常量:#include <stdio.h>int main(){ char *message = "Hello World!"; printf("%s\n",message); while(*message != '\0'){ printf("%c ",*message++); } printf("\n"); return0;}/* output:* Hello World!* H e l l o W o r l d !*/ 这段代码,使⽤字符指针遍历了字符串常量中的每⼀个字符。

c语言字符串数组定义的几种方式

c语言字符串数组定义的几种方式

C语言中,字符串数组是一个很常见的数据类型。

在定义字符串数组的过程中,有几种方式可以使用,每种方式都有其特点和适用场景。

接下来,我将从浅入深地介绍这几种方式,并对其进行全面评估。

1. 使用字符数组来定义字符串数组在C语言中,可以使用字符数组来定义字符串数组。

例如:```char strArray[3][20] = {"hello", "world", "c语言"};```这种方式是最基础的定义字符串数组的方法。

它的优点是简单直接,容易理解和使用,适用于简单的场景。

但缺点是不够灵活,每个字符串的长度都是固定的,不能动态调整。

2. 使用指针数组来定义字符串数组除了使用字符数组,还可以使用指针数组来定义字符串数组。

例如:```char *strArray[3] = {"hello", "world", "c语言"};```这种方式相比于字符数组更加灵活,每个字符串的长度可以动态调整。

但要注意的是,需要手动管理每个字符串的内存空间,避免出现内存泄漏等问题。

3. 动态分配内存来定义字符串数组另一种方式是动态分配内存来定义字符串数组。

这种方式可以在运行时动态申请和释放内存,非常灵活。

例如:```char **strArray;strArray = (char **)malloc(3 * sizeof(char *));for (int i = 0; i < 3; i++) {strArray[i] = (char *)malloc(20 * sizeof(char));}strcpy(strArray[0], "hello");strcpy(strArray[1], "world");strcpy(strArray[2], "c语言");```这种方式虽然灵活,但需要手动管理内存,容易出现内存泄漏和指针错误等问题,需要谨慎使用。

c语言字符串数组定义的几种方式

c语言字符串数组定义的几种方式

C语言是一种被广泛应用于系统编程和嵌入式开发的编程语言,而字符串则是C语言中非常常见的数据类型。

在C语言中,字符串可以用字符数组来表示,而定义字符串数组的方式也有几种不同的方法。

1. 直接定义字符串数组直接定义字符串数组是最简单直接的方式,可以像定义其他数组一样来定义字符串数组。

例如:```Cchar strArray1[3][10] = {"Hello", "World", "C"};```在这个例子中,我们定义了一个包含3个字符串的数组,每个字符串的最大长度为10个字符。

通过直接赋值的方式,我们可以初始化这个字符串数组。

2. 逐个赋值如果不想在定义字符串数组的同时进行初始化,也可以通过逐个赋值的方式来初始化字符串数组。

例如:```Cchar strArray2[3][10];strcpy(strArray2[0], "Hello");strcpy(strArray2[1], "World");strcpy(strArray2[2], "C");```通过逐个赋值的方式,我们可以在定义之后再对字符串数组进行赋值操作。

3. 使用指针数组除了以上两种方式之外,还可以使用指针数组来表示字符串数组。

例如:```Cchar *strArray3[3] = {"Hello", "World", "C"};```在这个例子中,我们定义了一个包含3个指针的数组,每个指针指向一个字符串常量。

通过使用指针数组的方式,我们可以更加灵活地管理字符串数组。

总结回顾:通过以上几种方式的讨论,我们可以看到在C语言中定义字符串数组有多种灵活的方式。

无论是直接定义、逐个赋值还是使用指针数组,都可以让我们在不同场景下更好地处理字符串数组。

在实际的编程过程中,我们可以根据具体情况来选择合适的方式来定义字符串数组。

c 字符串转化为整数

c 字符串转化为整数

c 字符串转化为整数C语言中的字符串是由字符组成的数组,通常以null字符'\0'作为结束符。

在C语言中,将字符串转化为整数是一种常见的操作。

本文将介绍字符串转化为整数的方法及注意事项。

我们需要了解C语言中的字符串表示方法。

字符串是由一系列字符组成的,可以包含字母、数字、特殊字符等。

在C语言中,字符串是以字符数组的形式存储的,数组的最后一个元素是以null字符'\0'结尾,表示字符串的结束。

要将字符串转化为整数,我们可以使用C语言提供的标准库函数atoi()或sscanf()。

下面分别介绍这两种方法的使用。

方法一:使用atoi()函数atoi()函数是C语言标准库中的一个字符串转整数函数,其原型为:```cint atoi(const char *str);```该函数接受一个字符串参数str,并返回其对应的整数值。

例如,我们可以将字符串"123"转化为整数123的方法如下:```cchar str[] = "123";int num = atoi(str);```在使用atoi()函数时,需要注意以下几点:- 如果字符串str无法转化为整数,或者超出了整数的表示范围,返回值将是未定义的。

因此,在使用atoi()函数时,需要确保字符串是合法的整数表示。

- atoi()函数会自动忽略字符串开头的空白字符,直到找到第一个非空白字符为止。

因此,可以将带有空格的字符串转化为整数。

- 如果字符串中包含非数字字符,atoi()函数将从第一个非数字字符处停止转化,并返回已转化的整数值。

例如,字符串"123abc"会被转化为整数123。

方法二:使用sscanf()函数sscanf()函数是C语言标准库中的格式化输入函数,可以从字符串中按照指定的格式解析出各种类型的数据。

其原型为:```cint sscanf(const char *str, const char *format, ...);```该函数接受两个参数,第一个参数str是要解析的字符串,第二个参数format是解析的格式控制字符串。

VC常用数据类型总结

VC常用数据类型总结

VC 常用数据类型总结1.ATOM 原子(原子表中的一个字符串的参考)2.BOOL 布尔变量3.BOOLEAN 布尔变量4.BYTE 字节(8位)HAR Windows字符6.CHAR Windows字符7.COLORREF 红、绿、蓝(RGB)彩色值(32位)8.Const 变量,该变量的值在执行期间保持为常量9.CRITICAL_SECTION 临界段对象10.CTRYID 国名标识符11.DLGPROC 指向一个对话框过程的指针12.DWORD 双字(32位)13.ENHMFENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举增强的元文件记录14.ENUMRESLANGPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源语言。

15.ENUMRESNAMEPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源名称。

16.ENUMRESTYPEPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举资源类型。

17.FARPROC 指向一个回调函数的指针18.FLOAT 浮点变量19.FMORDER 32位字体映射值的数组20.FONTENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举字体21.GOBJENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举图形设备接口(GDI)对象22.HACCEL 加速键表句柄23.HANDLE 对象的句柄24.HBITMAP 位图句柄25.HBRUSH 画刷句柄26.HCONV 动态数据交换(DDE)会话句柄27.HCONVLIST DDE 会话句柄28.HCURSOR 光标句柄29.HDC 设备描述表(DC)句柄30.HDDEDATA DDE 数据句柄31.HDLG 对话框句柄32.HDWP 延期窗口位置结构句柄33.HENHMETAFILE 增强原文件句柄34.HFILE 文件句柄35.HFONT 字体句柄36.HGDIOBJ GDI 对象句柄37.HGLOBAL 全局内存块句柄38.HHOOK 钩子句柄39.HICON 图标句柄40.HINSTANCE 实例句柄41.HKEY 登记关键字句柄42.HLOCAL 局部内存块句柄43.HMEMU 菜单句柄44.HMETAFILE 元文件句柄45.HMIDIIN 乐器的数字化接口(MIDI)输入文件句柄46.HMIDIOUT MIDI 输出文件句柄47.HMMIO 文件句柄48.HOOKPROC 指向一个应用程序定义的钩子函数的指针49.HPALETTE 调色板句柄50.HPEN 画笔句柄51.HRGN 域句柄52.HRSRC 资源句柄53.HSZ DDE 字符串句柄54.HWAVEIN 波形输入文件句柄55.HWAVEOUT 波形输出文件句柄56.HWINSTA 工作站句柄57.HWND 窗口句柄58.INT 符号整数NGID 语言标识符60.LCID 所在国(Locale)标识符61.LCTYPE 所在国类型62.LINEDDAPROC 指向一个回调函数的指针,该回调函数处理行坐标63.LONG 32位符号整数64.LP 指向一个以"NULL"结束的Unicode(TM)字符串的指针65.LPARAM 32位消息参数66.LPBOOL 指向一个布尔变量的指针67.LPBYTE 指向一个字节的指针68.LPCCH 指向一个Windows字符常量的指针69.LPCCHOOKPROC 指向一个应用程序定义的钩子函数的指针70.LPCFHOOLPROC 指向一个应用程序定义的钩子函数的指针71.LPCH 指向一个Windows字符的指针72.LPCOLORREF 指向一个COLORREF值的指针73.LPCRITICAL_SECTION 指向一个临界段对象的指针74.LPCSTR 指向一个以"NULL"结束的WINDOWS字符串常量的指针75.LPCTSTR 指向一个以"NULL"结束的Unicode或Windows字符串常量的指针76.LPCWCH 指向一个以"NULL"指向一个以"NULL"结束的Unicode字符常量的指针77.LPCWSTR 指向一个以"NULL"指向一个以"NULL"结束的Unicode字符串常量的指针78.LPDWORD 指向一个无符号双字(32位)的指针79.LPFRHOOLPROC 指向一个应用程序定义的钩子函数的指针80.LPHANDLE 指向一个句柄的指针81.LOHANDLER_FUNCTION 指向一个处理程序函数的指针82.LPHWAVEIN 指向一个波形输入文件句柄的指针83.LPHWAVEOUT 指向一个波形输出文件句柄的指针84.LPINT 指向一个符号整数的指针85.LPLONG 指向一个符号长整数(32位)的指针86.LPOFNHOOKPROC 指向一个应用程序定义的钩子函数的指针87.LPPRINTHOOKPROC 指向一个应用程序定义的钩子函数的指针88.LPSETUPHOOKPROC 指向一个应用程序定义的钩子函数的指针89.LPTSTR 指向一个以NULL结束的Unicode或Windows字符串的指针90.LRESULT 消息处理的符号结果91.LPVOID 指向任何类型的指针92.LPWSTR 指向一个以"NULL"结束的Unicode字符串的指针93.LUID 局部唯一的标识符94.MCIDEVICEID 媒体控制接口(MCI)设备标识符95.MFENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举元文件记录96.MMRESULT 多媒体消息的处理结果97.NPSTR 指向一个以"NULL"结束的Windows字符串的指针98.NWPSTR 指向一个以"NULL"结束的Unicode字符串的指针99.PBOOL 指向一个布尔变量的指针100.PBYTE 指向一个字节的指针101.PCCH 指向一个Windows字符常量的指针102.PCH 指向一个Windows字符的指针103.PCHAR 指向一个Windows字符的指针104.PCRITICAL_SECTION 指向一个临界段对象的指针105.PCSTR 指向一个以"NULL"结束的Windows字符串常量的指针106.PCWCH 指向一个Unicode字符常量的指针107.PCWSTR 指向一个以"NULL"结束的Unicode字符串常量的指针108.PDWORD 指向一个无符号双字的指针109.PFLOAT 指向一个浮点变量的指针110.PFNCALLBACK 指向一个回调函数的指针111.PHANDLE 指向一个句柄的指针112.PHANDLER_ROUTINE 指向一个处理程序的指针113.PHKEY 指向一个登记关键字的指针114.PINT 指向一个符号整数的指针115.PLONG 指向一个符号长整数的指针116.PLUID 指向一个局部唯一的表示符(LUID)的指针117.PROPENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举窗口特征118.PSHORT 指向一个符号短整数的指针119.PSID 指向一个加密标识符(SID)的指针120.PSTR 指向一个以"NULL"结束的Windows字符串的指针121.PSZ 指向一个以"NULL"结束的Windows字符串的指针122.PTCH 指向一个Windows或Unicode字符的指针123.PTCHAR 指向一个Windows或Unicode字符的指针124.PTSTR 指向一个以"NULL"结束的Windows或Unicode字符串的指针125.PUCHAR 指向一个无符号Windows字符的指针126.PUINT 指向一个无符号整数的指针127.PULONG 指向一个无符号长整数的指针128.PUSHORT 指向一个无符号短整数的指针129.PVOID 指向任何类型的指针130.PWCH 指向一个Unicode字符的指针131.PWCHAR 指向一个Unicode字符的指针132.PWORD 指向一个无符号字的指针133.PWSTR 指向一个以"NULL"结束的Unicode字符串的指针134.REGSAM 登记关键字的加密掩码135.SC_HANDLE 服务句柄136.SERVICE_STATUS_HANDLE 服务状态值句柄137.SHORT 短整数138.SPHANDLE 指向一个句柄的指针139.TCHAR Unicode或Windows字符140.TIMERPROC 指向一个应用程序定义的定时器回调函数的指针141.UCHAR 无符号Windows字符142.UINT 无符号整数143.ULONG 无符号长整数HORT 无符号短整数145.VOID 任何类型146.WCHAR Unicode字符147.WNDENUMPROC 指向一个应用程序定义的回调函数的指针,该回调函数枚举窗口148.WNDPROC 指向一个应用程序定义的窗口过程的指针149.WORD 无符号字(16位)150.WPARAM 32位消息参数151.YIELDPROC 指向一个输出回调函数的指针。

VC使用说明书

VC使用说明书

VC使用说明我们所需要建立的程序的主要功能是自动生成零件加工工艺规程,内容主要是画边框,,画零件图,固定文本输出,从数据库输出信息。

一:建立新的应用程序:在project name 里面写上你所要建的程序名称,选择保存路径,选择Create new workspace。

点击下一步,在第一步中选择建立单文档应用程序即SDI。

其他步选择默认,第六步选择Finish。

此时会显示所建立的应用程序的基本信息。

这时的程序是一个空框架,MFC提供了四个类,APP类,View类,Doc类,还有MainFrame类。

二:创建画笔,画刷,画边框:1:创建画笔,创建画笔的函数声明如下:CPen( int nPenStyle, int nWidth, COLORREF crColor );第一个参数nPenStyle 指定画笔的类型,比如PS_SOLID指实线画笔,PS_DASHDOT代表虚线画笔等等。

这里可以从MSDN 中找到所需要的参数。

第二个参数nWidth指定画笔的宽度,第三个指定画笔的颜色,画笔颜色设置采用RGB模式,R代表红色,G代表绿色,B代表蓝色,每一种分量从0~255变化,一般形式为RGB(r,g,b),R,G,B全部为0代表白色,全部为255为黑色。

另一种创建画笔的声明为:CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );前三个参数同上,第四个参数pLogBrush是指向LOGBRUSH结构体的指针。

nStyleCount指定长度,如果nPenStyle不是PS_USERSTYLE,则其必须为0。

lpStyle为指向一串双字组数值的指针,如果nPenStyle不是PS_USERSTYLE,lpStyle须是NULL。

详细信息请参看MSDN。

VC++标准C++中的string类的用法总结

VC++标准C++中的string类的用法总结

VC++标准C++中的string类的⽤法总结相信使⽤过MFC编程的朋友对CString这个类的印象应该⾮常深刻吧?的确,MFC中的CString类使⽤起来真的⾮常的⽅便好⽤。

但是如果离开了MFC框架,还有没有这样使⽤起来⾮常⽅便的类呢?答案是肯定的。

也许有⼈会说,即使不⽤MFC框架,也可以想办法使⽤MFC中的API,具体的操作⽅法在本⽂最后给出操作⽅法。

其实,可能很多⼈很可能会忽略掉标准C++中string类的使⽤。

标准C++中提供的string类得功能也是⾮常强⼤的,⼀般都能满⾜我们开发项⽬时使⽤。

现将具体⽤法的⼀部分罗列如下,只起⼀个抛砖引⽟的作⽤吧,好了,废话少说,直接进⼊正题吧!要想使⽤标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语⾔中的头⽂件using std::string;using std::wstring;或using namespace std;下⾯你就可以使⽤string/wstring了,它们两分别对应着char和wchar_t。

string和wstring的⽤法是⼀样的,以下只⽤string作介绍:string类的构造函数:string(const char *s);//⽤c字符串s初始化<BR>string(int n,char c);//⽤n个字符c初始化此外,string类还⽀持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。

当构造的string太长⽽⽆法表达时会抛出length_error异常;string类的字符操作:const char &operator[](int n)const;const char &at(int n)const;char &operator[](int n);char &at(int n);//operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。

VC中实现GB2312、BIG5、Unicode编码转换的方法

VC中实现GB2312、BIG5、Unicode编码转换的方法

VC中实现GB2312、BIG5、Unicode编码转换的⽅法本⽂主要以实例形式讨论了VC编译环境下,实现字符串和⽂件编码⽅式转换的⽅法,在linux下请使⽤Strconv来实现。

具体⽅法如下:⼀、⽂件编码格式转换//GB2312 编码⽂件转换成 Unicode:if((file_handle = fopen(filenam,"rb")) != NULL){//从GB2312源⽂件以⼆进制的⽅式读取buffernumread = fread(str_buf_pool,sizeof(char),POOL_BUFF_SIZE,file_handle);fclose(file_handle);//GB2312⽂件buffer转换成UNICODEnLen =MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,NULL,0);MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,(LPWSTR)str_unicode_buf_pool,nLen);//组装UNICODE Little Endian编码⽂件⽂件头标⽰符"0xFF 0xFE"//备注:UNICODE Big Endian编码⽂件⽂件头标⽰符"0xFF 0xFE"//Little Endian与Big Endian编码差异此处不详述unicode_little_file_header[0]=0xFF;unicode_little_file_header[1]=0xFE;//存储⽬标⽂件if((file_handle=fopen(filenewname,"wb+")) != NULL){fwrite(unicode_little_file_header,sizeof(char),2,file_handle);numwrite = fwrite(str_unicode_buf_pool,sizeof(LPWSTR),nLen,file_handle);fclose(file_handle);}}⼆、字符串编码格式转换//GB2312 转换成 Unicode:wchar_t* GB2312ToUnicode(const char* szGBString){UINT nCodePage = 936; //GB2312int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);wchar_t* pBuffer = new wchar_t[nLength+1];MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);pBuffer[nLength]=0;return pBuffer;}//BIG5 转换成 Unicode:wchar_t* BIG5ToUnicode(const char* szBIG5String){UINT nCodePage = 950; //BIG5int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);wchar_t* pBuffer = new wchar_t[nLength+1];MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);pBuffer[nLength]=0;return pBuffer;}//Unicode 转换成 GB2312:char* UnicodeToGB2312(const wchar_t* szUnicodeString){UINT nCodePage = 936; //GB2312int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);char* pBuffer=new char[nLength+1];WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);pBuffer[nLength]=0;return pBuffer;}//Unicode 转换成 BIG5:char* UnicodeToBIG5(const wchar_t* szUnicodeString){UINT nCodePage = 950; //BIG5int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);char* pBuffer=new char[nLength+1];WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);pBuffer[nLength]=0;return pBuffer;}//繁体中⽂BIG5 转换成简体中⽂ GB2312char* BIG5ToGB2312(const char* szBIG5String){LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);char* pBuffer = new char[nLength + 1];LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);pBuffer[nLength] = 0;delete[] szUnicodeBuff;delete[] szGB2312Buff;return pBuffer;}//简体中⽂ GB2312 转换成繁体中⽂BIG5char* GB2312ToBIG5(const char* szGBString){LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);char* pBuffer=new char[nLength+1];LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);pBuffer[nLength]=0;wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);delete[] pBuffer;delete[] pUnicodeBuff;return pBIG5Buff;}三、API 函数:MultiByteToWideChar参数说明第⼀个参数为代码页, ⽤ GetLocaleInfo 函数获取当前系统的代码页,936: 简体中⽂, 950: 繁体中⽂第⼆个参数为选项,⼀般⽤ 0 就可以了第三个参数为 ANSI 字符串的地址, 这个字符串是第⼀个参数指定的语⾔的 ANSI 字符串 (AnsiString)第四个参数为 ANSI 字符串的长度,如果⽤ -1, 就表⽰是⽤ 0 作为结束符的字符串第五个参数为转化⽣成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算⽣成的字符串的长度第六个参数为转化⽣成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。

vc解析json字符串

vc解析json字符串

VC++ ‎解析JSO‎N字串‎一、摘要‎‎JSON‎的全称为‎:Java‎S crip‎t Obj‎e ct N‎o tati‎o n,顾名‎思义,JS‎O N 是用‎于标记J‎a vasc‎r ipt ‎对象的,J‎S ON 官‎方的解释为‎:JSON‎是一种轻‎量级的数据‎传输格式。

‎本文并‎不详细介绍‎JSON‎本身的细‎节,旨在讨‎论如何使用‎C++ ‎语言来处理‎JSON‎。

关于 J‎S ON 更‎具体的信息‎,可参见‎J SON ‎官网:ht‎t p://‎w ww.j‎s on.o‎r g。

‎二、本文选‎择处理 J‎S ON的‎C++ 库‎‎本文选择‎一个第三方‎库 jso‎n cpp ‎来解析 J‎S ON。

j‎s oncp‎p是比较‎出名的 C‎++ JS‎O N 解析‎库。

在 J‎S ON 官‎网也是首推‎的。

下‎载地址为:‎h ttp:‎//sou‎r cefo‎r ge.n‎e t/pr‎o ject‎s/jso‎n cpp。

‎本文使用的‎json‎c pp 版‎本为:0.‎5.0。

‎三、js‎o ncpp‎在 Wi‎n dows‎下的编译‎要使用‎第三方源码‎库,第一步‎少不了的就‎是编译,将‎源码文件编‎译成我们方‎便使用的动‎态链接库、‎静态链接库‎或者静态导‎入库[1]‎。

js‎c oncp‎p进行‎J SON ‎解析的源码‎文件分布在‎incl‎u de/j‎s on、s‎r c/li‎b_jso‎n下。

其‎实jso‎n cpp ‎源码并不多‎,为了方便‎产品管理,‎此处没必要‎将其编译为‎动态链接库‎或者静态导‎入库,所以‎我们选择使‎用静态链接‎库[2]。

‎jso‎n cpp ‎已经处理的‎很完善了,‎所有编译选‎项都已经配‎置好,打开‎m akef‎i les/‎v s71/‎j sonc‎p p.sl‎n便可以‎开始编译(‎默认是使用‎VS20‎03 编译‎器的,打开‎时直接按照‎VS20‎05 提示‎转换即可)‎。

VC++中的char wchar_T和TCHAR

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 *szTest=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字符串转数字

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字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。

返回值返回转换后的长整型数。

VC 多媒体技术 MCI使用

VC  多媒体技术 MCI使用

MCI 命令列表 命令说明 命令类型
返回有关 MCI 设备的信息 为一个指定的 MCI 设备设置一个终止键 播放 Windows 指定的系统声音 关闭一个 MCI 设备 获得一个 MCI 设备的性能参数 从一个 MCI 设备得到有关的信息 初始化一个 MCI 设备 从 MCI 设备返回有关的状态 从一个磁盘文件中加载数据 暂停播放 开始播放 开始记录数据 重新开始播放或录音 将数据存储到磁盘文件中 向前或向后检索 设置设备信息 停止播放或记录 常用的 MCI 函数 类型 向 MCI 发送命令消息函数 可选命令 通用命令 系统命令
说 明: (1)mail.wav 是一个 WAV 声音文件,第 4 步时已经复制到此项目文件中。程序首先打开了 MCI 设 备,并把设备标识赋给了类的成员变量 m_MCIDeviceID。注意声音文件名不要带扩展名.wav。
6、播放声音文件 用 ClassWizard 为播放按钮(IDC_PLAY) ,在 CMyDlg 类添加鼠标单击的消息映射函 数,并加如下代码: void CMyDlg::OnPlay() { //添加控件通知消息处理代码 MCI_PLAY_PARMS mciPlayParms; mciPlayParms.dwFrom=0; //从文件开始处开始播放 mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_FROM, (DWORD)(LPVOID)&mciPlayParms); } 7、在程序退出时停止播放并关闭 MCI 设备 用 ClassWizard 为 CMyDlg 类添加 WM_DESTROY 消息, 该消息映射函数能使程序 退出时停止声音文件的播放并关闭 MCI 设备。 void CMyDlg::OnDestroy() { CDialog::OnDestroy(); mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL); //停止播放 mciSendCommand(m_MCIDeviceID,MCI_CLOSE,MCI_WAIT,NULL); //关闭 MCI 设备 } (8)编译并运行程序,在单击“播放”按钮时,程序将播放声音;当单击“退出”按 钮或单击窗口的关闭按钮时,声音播放会立即停止。 7.2 MCI(媒体控制接口) 媒体控制接口(Media Control Interface)为 Windows 程序提供了在高层次上控制媒 体设备接口的能力。程序不必关心具体设备,就可以对激光唱机(CD) 、视盘机、波形 音频设备、视频播放设备和 MIDI 设备等媒体设备进行控制。对于程序员来说,可以把 MCI 理解为设备面板上的一排按钮,通过选择不同的按键(发送不同的 MCI 命令)就可以 让设备完成各种功能,而不必关心设备内部实现。例如,对于 play 按键,视盘机和 CD

c语言字符串之间的比较

c语言字符串之间的比较

c语言字符串之间的比较C语言是一种广泛应用于系统程序开发和嵌入式系统领域的编程语言。

字符串是C语言中最常用的数据类型之一,主要用于存储和操作文本数据。

字符串之间的比较是C语言中一个基本的操作,它可以帮助我们判断两个字符串是否相等,或者确定一个字符串在字典中的顺序。

一、比较字符串的方法在C语言中,我们可以使用几种不同的方法来比较字符串。

下面是最常见的几种方法:1.使用strcmp函数进行比较strcmp函数是C语言标准库中提供的一个用于比较字符串的函数。

它的函数原型为:```int strcmp(const char *str1, const char *str2);```该函数接受两个字符串作为参数,并返回一个整数值。

如果两个字符串相等,返回0;如果str1小于str2,则返回一个小于0的值;如果str1大于str2,则返回一个大于0的值。

下面是一个使用strcmp函数比较字符串的示例代码:```c#include <stdio.h>#include <string.h>int main() {char str1[] = "hello";char str2[] = "world";int result = strcmp(str1, str2);if (result == 0) {printf("str1和str2相等\n");} else if (result < 0) {printf("str1小于str2\n");} else {printf("str1大于str2\n");}return 0;}```2.使用strncmp函数进行比较strncmp函数和strcmp函数类似,但是它可以指定比较的字符数。

它的函数原型为:```int strncmp(const char *str1, const char *str2, size_t n);```该函数接受三个参数,分别是两个字符串和要比较的字符数n。

VC++常用数据类型

VC++常用数据类型

VC++常用数据类型在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。

之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。

那么什么是BSTR、LPSTR以及LPWSTR呢?BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。

它被描述成一个与自动化相兼容的类型。

由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。

图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。

LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。

LPSTR被定义成是一个指向以NULL(‘/0’)结尾的8位ANSI 字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。

在VC++中,还有类似的字符串类型,如LPTSTR、LPCTSTR等,它们的含义如图2所示。

例如,LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为char*。

一般地,还有下列类型定义:#ifdef UNICODEtypedef LPWSTR LPTSTR;typedef LPCWSTR LPCTSTR;#elsetypedef LPSTR LPTSTR;typedef LPCSTR LPCTSTR;#endif二、CString、CStringA 和CStringWVisual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。

c字符串数组

c字符串数组

c字符串数组c字符串数组是c语言中非常常用的一种数据类型,它一般用于保存可以表示字符串的字符数组,也可以表示普通字符数组,在编程中,c字符串数组用来处理文本、缓存数据等常见任务,它的声明、定义和使用方法都非常简单,但在使用时,仍然需要注意诸多陷阱。

首先,让我们来看一下c字符串数组的声明、定义和使用方法。

c字符串数组的声明有两种方式,一种是用数组重载类型定义,另一种是用字符指针定义。

当使用数组重载类型定义时,可以使用字符数组声明c字符串数组,例如:charstr1[10];而当使用指针定义时,可以使用一个带有指向字符数组的指针来定义c字符串数组,例如:char * str2;。

在定义完c字符串数组之后,接下来就可以使用它来做一些操作了,由于c字符串数组是由字符组成的,因此操作起来也比较方便,可以使用内置函数来完成一些操作,比如strcpy()函数可以用来复制一个字符串,strcmp()可以用来比较两个字符串,strcat()可以用来拼接两个字符串,等等。

在使用c字符串数组的时候,还需要注意一些陷阱。

首先是字符串的长度,使用字符数组来保存字符串,必须要给定一个长度,这个长度必须足够大,以保证字符串可以完整保存,而且长度还必须考虑到0这个字符,所以当定义字符数组的长度时,必须要把0加上,比如:charstr1[10],如果要保存一个字符串Hello World,那么这个字符数组的长度必须是11,即charstr1[11],只有这样,才能保证字符串可以完整保存。

另外,在使用c字符串数组的时候,还要注意字符串的编码。

c 语言中字符串的编码分为两种:ANSI和UTF-8,两者的编码方式不同,使用的函数也不一样,所以在使用c字符串数组的时候,要根据实际情况确定字符串的编码,以便使用合适的函数。

最后,要注意在使用c字符串数组时,要在释放字符串数组之前,先将字符串数组设置为空,否则可能会因为字符串还有未释放的内存空间而导致程序终止,最常用的方法是使用memset()函数将字符串数组设为空,以便在释放字符串数组之前正确释放内存空间。

VC++中字符串比较和查找

VC++中字符串比较和查找

VC++中字符串比较和查找常用字符串函数1. 字符串比较函数//比较两个字符串是否相同int StrCmp(LPCTSTR lpStr1,LPCTSTR lpStr2);int StrCmpN(LPCTSTR lpStr1,LPCTSTR lpStr2,int nChar);int strcmp( const char *string1, const char *string2 );int wcscmp( const wchar_t *string1, const wchar_t *string2 );int CompareString(LCID Locale, DWORD dwCmpFlags, LPCTSTR lpString1, int cchCount1, LPCTSTR lpString2, int cchCount2);2. 计算字符串长度HRESULT StringCchLength( LPCTSTR psz,size_t cchMax,size_t *pcch); //replacement for strlensize_t strlen( const char *string );size_t wcslen( const wchar_t *string );3. 字符串赋值函数HRESULT StringCchCopy(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcpy HRESULT StringCchCopyN(LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchSrc); //replacement for strncpyLPTSTR StrCpy(LPTSTR psz1,LPCTSTR psz2); //存在安全问题LPTSTR StrCpyN(LPTSTR psz1,LPCTSTR psz2,int cchMax); //存在安全问题char *strcpy( char *strDestination, const char *strSource );wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );char *strncpy( char *strDest, const char *strSource, size_t count );wchar_t *wcsncpy( wchar_t*strDest, const wchar_t *strSource, size_t count );4. 字符串连接函数HRESULT StringCchCat( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc); //replacement for strcatHRESULT StringCchCatN( LPTSTR pszDest,size_t cchDest,LPCTSTR pszSrc,size_t cchMaxAppend); //replacement for strncatLPTSTR StrCat( LPTSTR psz1,LPCTSTR psz2); //存在安全问题LPTSTR StrNCat( LPTSTR pszFront,LPCTSTR pszBack,int cchMax); //存在安全问题char *strcat( char *strDestination, const char *strSource );wchar_t *wcscat( wchar_t *strDestination, const wchar_t *strSource );char *strncat( char *strDest, const char *strSource, size_t count );wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );5. 字符查找函数//查找字符串中指定字符第一次出现的位置LPTSTR StrChr( LPCTSTR lpStart,TCHAR wMatch); //区分大小写char *strchr( const char *string, int c );wchar_t *wcschr( const wchar_t *string, wchar_t c );LPTSTR StrChrI( LPCTSTR lpStart,TCHAR wMatch); //不区分大小写//查找字符串中指定字符最后一次出现的位置LPTSTR StrRChr( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //区分大小写char *strrchr( const char*string, int c );wchar *wcsrchr( const wchar_t *string, int c );LPTSTR StrRChrI( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //不区分大小写*注 StrRChr()函数可以通过StrChr()函数和while循环来实现。

VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本

VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本

VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本Ansi字符串我们最熟悉英文占一个字节汉字2个字节以一个0结尾常用于txt文本文件Unicode字符串每个字符汉字、英文字母都占2个字节以2个连续的0结尾NT操作系统内核用的是这种字符串常被定义为typedef unsigned short wchar_t所以我们有时常会见到什么char无法转换为unsigned short之类的错误其实就是unicode UTF8是Unicode一种压缩形式英文A在unicode中表示为0x0041老外觉得这种存储方式太浪费因为浪费了50的空间于是就把英文压缩成1个字节成了utf8编码但是汉字在utf8中占3个字节显然用做中文不如ansi合算这就是中国的网页用作ansi编码而老外的网页常用utf8的原因。

UTF8在还游戏里运用的很广泛比如WOW的lua脚本等下面来说一下转换主要用代码来说明吧写文件我用了CFile类其实用FILE之类的也是一样写文件和字符串什么类别没有关系硬件只关心数据和长度Ansi转Unicode 介绍2种方法void CConvertDlg::OnBnClickedButtonAnsiToUnicode // ansi to unicode char szAnsi abcd1234你我他//预转换得到所需空间的大小intwcsLen ::MultiByteToWideCharCP_ACP NULL szAnsi strlenszAnsi NULL 0 //分配空间要给0留个空间MultiByteToWideChar不会给0空间wchar_t wszString new wchar_twcsLen 1 //转换::MultiByteToWideCharCP_ACP NULL szAnsi strlenszAnsi wszString wcsLen //最后加上0 wszStringwcsLen 0 //unicode版的MessageBoxAPI ::MessageBoxWGetSafeHwnd wszString wszString MB_OK //接下来写入文本//写文本文件头2个字节0xfeff低位0xff写在前CFile cFile cFile.Open_T1.txt CFile::modeWrite CFile::modeCreate //文件开头cFile.SeekToBegincFile.Writexffxfe 2 //写入内容cFile.WritewszString wcsLen sizeofwchar_tcFile.Flush cFile.Close delete wszString wszString NULL //方法2 //设置当前地域信息不设置的话使用这种方法中文不会正确显示//需要include setlocaleLC_CTYPE chs wchar_t wcsStr100 //注意下面是大写S在unicode中代表后面是ansi字符串//swprintf 是sprintf的unicode版本//格式的前面要加大写L代表是unicode swprintfwcsStr LS szAnsi ::MessageBoxWGetSafeHwnd wcsStr wcsStr MB_OK Unicode转Ansi 也是2种方法void CConvertDlg::OnBnClickedButtonUnicodeToAnsi // unicode to ansi wchar_t wszString Labcd1234你我他//预转换得到所需空间的大小这次用的函数和上面名字相反int ansiLen ::WideCharToMultiByteCP_ACP NULL wszString wcslenwszString NULL 0 NULL NULL //同上分配空间要给0留个空间char szAnsi new charansiLen 1 //转换//unicode版对应的strlen是wcslen ::WideCharToMultiByteCP_ACP NULL wszString wcslenwszString szAnsi ansiLen NULL NULL //最后加上0 szAnsiansiLen 0 //Ansi版的MessageBoxAPI ::MessageBoxAGetSafeHwnd szAnsi szAnsi MB_OK //接下来写入文本//写文本文件ANSI文件没有BOM CFile cFile cFile.Open_T1.txt CFile::modeWriteCFile::modeCreate //文件开头cFile.SeekToBegin //写入内容cFile.WriteszAnsi ansiLen sizeofchar cFile.Flush cFile.Close delete szAnsi szAnsi NULL //方法2 //和上面一样有另一种方法setlocaleLC_CTYPE chs char szStr100 //注意下面是大写在ansi 中代表后面是unicode字符串//sprintf sprintfszStr SwszString ::MessageBoxAGetSafeHwnd szStr szStr MB_OK Unicode转UTF8 void CConvertDlg::OnBnClickedButtonUnicodeToU8 // unicode to UTF8 wchar_twszString Labcd1234你我他//预转换得到所需空间的大小这次用的函数和上面名字相反int u8Len ::WideCharToMultiByteCP_UTF8 NULL wszString wcslenwszString NULL 0 NULL NULL //同上分配空间要给0留个空间//UTF8虽然是Unicode的压缩形式但也是多字节字符串所以可以以char的形式保存char szU8 new charu8Len 1 //转换//unicode版对应的strlen是wcslen ::WideCharToMultiByteCP_UTF8 NULL wszString wcslenwszString szU8u8Len NULL NULL //最后加上0 szU8u8Len 0 //MessageBox不支持UTF8所以只能写文件//接下来写入文本//写文本文件UTF8的BOM是0xbfbbef CFile cFilecFile.Open_T1.txt CFile::modeWrite CFile::modeCreate //文件开头cFile.SeekToBegin //写BOM同样低位写在前cFile.Writexefxbbxbf 3 //写入内容cFile.WriteszU8 u8Len sizeofchar cFile.Flush cFile.Close delete szU8 szU8 NULL UTF8转UNICODE void CConvertDlg::OnBnClickedButtonU8ToUnicode //UTF8 to Unicode //由于中文直接复制过来会成乱码编译器有时会报错故采用16进制形式char szU8 abcd1234xe4xbdxa0xe6x88x91xe4xbbx96x00 //预转换得到所需空间的大小int wcsLen ::MultiByteToWideCharCP_UTF8 NULL szU8 strlenszU8 NULL 0 //分配空间要给0留个空间MultiByteToWideChar不会给0空间wchar_t wszString new wchar_twcsLen 1 //转换::MultiByteToWideCharCP_UTF8 NULL szU8 strlenszU8 wszString wcsLen //最后加上0 wszStringwcsLen 0 //unicode版的MessageBoxAPI ::MessageBoxWGetSafeHwnd wszString wszString MB_OK //写文本同ansi to unicode Ansi转换utf8和utf8转换Ansi就是上面2个的结合把unicode作为中间量进行2次转换即可。

vc中CString对象的GetBuffer()用法小结

vc中CString对象的GetBuffer()用法小结

vc中CString对象的GetBuffer()用法小结1.GetBuffer函数说明这个函数是为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const的,从而允许直接修改CString中的内容。

如果nMinBufLength(最小占用长度)比当前buffer长度大,那么就调用GetBuffer函数去释放当前的Buffer,用一个被请求的大小去覆盖这个buffer并且重新设定计数器为0,如果在这之前你在这个buffer中调用了LockBuffer,那么你将失去你当前锁定的buffer。

注意事项:如果你使用这个指向由GetBuffer所改变返回的字符串内容,那么在你使用CString其他CString方法之前你必须调用ReleaseBuffer在调用ReleaseBuffer函数之后GetBuffer中的内容将无效(也就是销毁)当这个CString被销毁的时候,这个buffer所占用的内存将被自动释放注意这个: 如果你知道了这个字符串的长度,你不可以直接添加NULL字符了事,当你使用ReleaseBuffer的时候,无论如何,你必须指定最后的字符串的长度,如果你仅仅添加了一个NULL字符结束符给这个字符串,你应该给ReleaseBuffer传递一个-1,当这个函数结束的时候,_tcslen 将决定这个buffer的长度GetBuffer(0):意思是将字符串对象原样返回指针,不改变大小2.使用例子例子:// example for CString::GetBufferCString s( "abcd" );//定义一个CString s并且初始化为abcd#ifdef _DEBUGafxDump << "CString s " << s << "\n";#endifLPTSTR p = s.GetBuffer( 10 );//定义一个指针指向LPTSTR并接受GetBuffer所返回的地址lstrcpy( p, _T("Hello") ); // directly access CString buffer//使用Istrcpy将Hello]复制到该buffer中s.ReleaseBuffer( );//释放buffer#ifdef _DEBUGafxDump << "CString s " << s << "\n";这时候s="Hello";#endif。

c字符串替换函数

c字符串替换函数

c字符串替换函数C字符串替换函数C语言是一种广泛使用的程序设计语言,尤其在嵌入式系统开发、操作系统开发等领域得到了广泛应用。

在C语言中,字符串是一种常见的数据类型,而C字符串替换函数是对字符串进行修改和替换的重要工具。

本文将介绍C字符串替换函数的使用方法和注意事项。

一、C字符串替换函数的基本概念C字符串替换函数是一种用于修改字符串内容的函数。

它通常接受两个参数:原始字符串和替换字符串。

函数会在原始字符串中查找匹配替换字符串的子串,并将其替换为指定的新字符串。

C语言中常用的字符串替换函数有str_replace、strstr、strtok等。

二、str_replace函数str_replace函数是C语言中常用的字符串替换函数之一。

它接受三个参数:原始字符串、待替换的子串和替换的新字符串。

函数会在原始字符串中查找所有匹配子串的位置,并将其替换为新字符串。

下面是一个使用str_replace函数的示例代码:```c#include <stdio.h>#include <string.h>void str_replace(char *str, const char *old, const char *new) {char *p, *q;int old_len = strlen(old);int new_len = strlen(new);while ((p = strstr(str, old)) != NULL) {q = p + old_len;memmove(q + new_len, q, strlen(q) + 1);memcpy(p, new, new_len);}}int main() {char str[100] = "hello world, hello c";str_replace(str, "hello", "hi");printf("%s\n", str);return 0;}```上述代码中,str_replace函数会将字符串中所有的"hello"替换为"hi"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档