64,670
社区成员
发帖
与我相关
我的任务
分享
c=p1,p1=p2; //赋值,这行为止都能执行
这里已经错了,p1没有NULL结尾,运气不好就是越界。
#include <windows.h>
#include <iostream>
using namespace std;
void readonly(char *p, bool b=true)
{
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(p,&mbi,sizeof mbi);
DWORD old_val, new_val=b ? PAGE_READONLY : PAGE_READWRITE;
if(mbi.Protect!=new_val)
VirtualProtect(mbi.BaseAddress, mbi.RegionSize, new_val, &old_val);
}
int main(void)
{
char *p="test";
readonly(p,false); // 取消只读属性
p[0]='x'; // 修改成功
cout <<p <<endl; // xest
readonly(p); // 设置只读属性
p[0]='y'; // 修改失败
return 0;
}
string a=("123456789012345"); // 常量区的字面值被拷贝到栈上
string b=("1234567890123456"); // 常量区的字面值被拷贝到堆上
char *pa=&a[0];
a[3]='\0';
cout <<a <<endl; // 123 56789012345
cout <<pa <<endl; // 123
const char *p2 ;
p2=c.c_str();