C语言的字符串处理的,求指教
答案:4 悬赏:70 手机版
解决时间 2021-01-27 06:06
- 提问者网友:轻浮
- 2021-01-26 09:41
C语言的字符串处理的,求指教
最佳答案
- 五星知识达人网友:逃夭
- 2021-01-26 10:38
A错误 str未赋初值
B在x16系统下正确,部分编译器正确
C++ x32下可以写成
DWORD flOldProtect;
HANDLE hProc = 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”的错误。
B在x16系统下正确,部分编译器正确
C++ x32下可以写成
DWORD flOldProtect;
HANDLE hProc = 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”的错误。
全部回答
- 1楼网友:你可爱的野爹
- 2021-01-26 14:11
A
str3没有分配空间,无法存储
str3没有分配空间,无法存储
- 2楼网友:举杯邀酒敬孤独
- 2021-01-26 12:41
A是错误的使用方式。追问但是我在电脑上运行,B也不可以,你能具体说下原因吗追答因为STR3使用前未被初始化。STR4看起来有点诡异,运行也报错,但是我不知道为什么4也是错的。
- 3楼网友:我住北渡口
- 2021-01-26 12:07
str3只是一个指针变量,但并没有表明str3指向哪个存储空间,所以A的做法是错误的
这是个多选题么,感觉B也不完全对。追问没错,我在VC上运行B也提醒是错的。但是我们老师说在给str4赋初始值时就是让str4指向一个空间,这个空间上保存着“string"没错,我在VC上运行B也提醒是错的。但是我们老师说在给str4赋初始值时就是让str4指向一个空间,这个空间上保存着“string"追答这种解释我个人认为是错误的,如果有:
char *str4="string";
那么你可以这么做:str4="eyeueu";
上面相当于是改变了str4的指向,系统会为“e......”这个字符串常量新开辟存储空间,并将这地址赋值给str4。此时,str4和它最初指向的string就没有关系了
但是,如果已经确定str4是指向string这个字符串的,那么绝不可以通过str4来改变这个存储空间里的值。而strcpy(str4,"HELL4");这就相当于改变了原来字符串常量的值,所以,我认为是错误的。追问不是很明白你讲的,但是还是很感谢!这个知道不能选两个满意答案,不好意思~
这是个多选题么,感觉B也不完全对。追问没错,我在VC上运行B也提醒是错的。但是我们老师说在给str4赋初始值时就是让str4指向一个空间,这个空间上保存着“string"没错,我在VC上运行B也提醒是错的。但是我们老师说在给str4赋初始值时就是让str4指向一个空间,这个空间上保存着“string"追答这种解释我个人认为是错误的,如果有:
char *str4="string";
那么你可以这么做:str4="eyeueu";
上面相当于是改变了str4的指向,系统会为“e......”这个字符串常量新开辟存储空间,并将这地址赋值给str4。此时,str4和它最初指向的string就没有关系了
但是,如果已经确定str4是指向string这个字符串的,那么绝不可以通过str4来改变这个存储空间里的值。而strcpy(str4,"HELL4");这就相当于改变了原来字符串常量的值,所以,我认为是错误的。追问不是很明白你讲的,但是还是很感谢!这个知道不能选两个满意答案,不好意思~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯