三九宝宝网宝宝教育教学论文

C语言的字符串处理的求指教

01月07日 编辑 39baobao.com

A错误 str未赋初值

B在x16系统下正确,部分编译器正确

C++ x32下可以写成

1

2

3

4

5

DWORDflOldProtect;

HANDLEhProc = GetCurrentProcess();

VirtualProtectEx(hProc, str4, strlen(str4)+1, PAGE_READWRITE, &flOldProtect);

strcpy(str4,"HELLO4");

VirtualProtectEx(hProc, str4, strlen(str4)+1, flOldProtect, &flOldProtect);

VirtualProtectEx用于修改页属性。

赋值语句char *str4="string";

编译器会将"string"字符串放在.rdata字段中,映射到应用程序空间后页属性为PAGE_READONLY(只读)。

VirtualProtectEx将页属性改为PAGE_READWRITE(读写)。

否则会产生0xC0000005异常,类似于“该内存不为Write”的错误。

推荐阅读
图文推荐