C++知识点(一)
L"“替换成_T(”")
使用正则表达式
1
2
|
查找 L(\".+?\")
替换成 _T($1)
|
阻断函数
1
2
|
getchar() //等待键盘输入回车
sysem("pause")//任意键继续
|
常用函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#pragma once //防止头文件被重复编译
#pragma warning(disable:4996)//忽略C4996错误
printf("Hello World!") //输出函数
atoi(arg) //字符串转整数
Sleep(arg) //等待
MessageBeep(1); //播放系统音乐,方便OD定位
__declspec(naked) //裸体函数
void *memcpy(void *str1, const void *str2, size_t n)
//内存copy(读取与写入)
//str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
//str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
//n -- 要被复制的字节数。
//返回值 -- 该函数返回一个指向目标存储区 str1 的指针。
void *memset(void *s, int ch, size_t n);
//内存设置
//将s中当前位置后面的n个字节,用 ch 替换并返回 s 。
size_t strlen(const char *string);
//计算给定字符串的长度 (ANSI)
size_t wcslen(const wchar_t * str);
//strlen函式的宽字节版 (Unicode)
BOOL CloseHandle(
HANDLE hObject //对象句柄
);//关闭对象句柄。
setlocale(LC_ALL, "chs");
//需要实现本地化,以实现中文正常输出
GetLastError();
//最后一次的出错代码
|
用汇编来调用CALL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
int pcall =(int)MessageBoxC;
__asm
{
push 0 //4
push 0 //3
push 0 //2
push 0 //1
call dword ptr ds:[MessageBoxA] //第一种
mov eax,MessageBoxB
call eax //第二种
call pcall //第三种
;分号 注释语句
}
|
ds 为数据段寄存器
循环
1
2
|
break; //退出循环
continue; //跳到循环首部,循环继续
|
其它
_In_ 表示是一个输入参数
_Out_ 表示是一个输出参数
&arg 引用
1.必须传变量
2.会影响被引用的变量原本的值
&变量 取变量地址运算符
*arg 指针
1.会影响被引用的变量原本的值
冒号:
冒号代表标签,常用于goto跳转
typedef
关键字,作用是为一种数据类型定义一个新名字
按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写
三元运算子
条件式 ? 条件式为true时执行的陈述句 : 条件式为false时执行的陈述句
1
2
3
4
5
6
|
int ret, a = 10, b = 11;
bool flag = true;
if (flag)
ret = a;
else
ret = b;
|
等价于
const
声明变量是不变的
define
定义宏,可用于起别名,也可带参数,如
1
|
#define hanshu(a,b) (a+b)
|
指针
| LPSTR |
char* |
| LPCSTR |
const char* |
| LPCTSTR |
const TCHAR* |
| LPTSTR |
TCHAR* |
LP = 指针
C = const 只读
TSTR = TCHAR
HINSTANCE
“句柄型”数据类型。
static
关键字 定义静态变量或静态函数,生存周期和全局变量一样,作用域和局部变量一样,初始化仅执行一次.
多字节字符串(char)及常用函数
char* 定义字符串
1
2
3
4
|
char p[256]="hijk"; //可读写
char src2[]="opq"; //可读写
char *p="abcd"; //只读
|
strcpy 字符串复制(wcscpy宽字节版)
1
|
char *strcpy(char* dest, const char *src);
|
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
strcpy_s 带有检测缓冲区的功能,更实用
strcat 字符串连接(wcscat宽字节版)
1
|
extern char *strcat(char *dest, const char *src);
|
strcat_s 带有检测缓冲区的功能,更实用
strstr 查找字符串(wcsstr宽字节版)
1
|
string strstr( string1,string2)
|
strstr返回一个指针,指向string2在string1中首次出现的位置。
strchr 查找字符(wcschr宽字节版)
1
|
char *strchr(const char *str, int c)
|
在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
strcmp 字符串比较(wcscmp宽字节版)
1
|
extern int strcmp(const char *s1,const char *s2);
|
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数.
c_str() string转const char*
以下仅了解
strrev
strncmp
strncmpi
strerror
strncpy
strnicmp
Unicode字符串(wchar)及常用函数
wchar_t 宽字符
1
2
3
4
5
|
wchar_t c1='A'; //单个字符不用加"L"
wchar_t wStr[]=L"这是一段中文"; //字符串前要加"L"
wchar_t appName[5]=TEXT("test");
//可以用TEXT()方法将char转换成wchar_t
|
char是8位字符类型,wchar_t数据类型一般为16位或32位,wchar_t所能表示的字符数远超char型。
- 如果你想使用ANSI字符串,那么请使用这一套写法:
1
2
|
char szString[100];
strcpy(szString,"test");
|
- 如果你想使用Unicode字符串,那么请使用这一套:
1
2
|
wchar_t szString[100];
wcscpyszString,L"test");
|
- 如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:
1
2
|
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
|
TCHAR兼容型字符串及常用函数
| TCHAR |
ANSI |
Unicode |
| TCHAR |
char |
wchar_t |
| _tcscpy() |
strcpy() |
wcscpy() |
| _tmain() |
main() |
wmain() |
| _tWinMain() |
WinMain() |
wWinMain() |
| _T"str" |
“str” |
L"str" |
| _tprintf() |
printf() |
wprintf() |
| _tcslen() |
strlen() |
wcslen() |