| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3146 人关注过本帖
标题:字符串赋值
只看楼主 加入收藏
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
[bo][un]eastvenuslee[/un] 在 2008-8-1 21:27 的发言:[/bo]

char name[6]="hello";

    cout

你都没有明白楼主在问什么问题,为什么要问这个问题。。。
2008-08-01 21:34
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
[bo][un]eastvenuslee[/un] 在 2008-8-1 21:19 的发言:[/bo]

能呀,不过你要分配空间给它呀

char *s="hello";
只要没有对hello的改变,程序都是正确的,
其实s就是一个只读的字符串,完全合法。
2008-08-01 21:36
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 12# woshiyun 的帖子
s就是一个只读的字符串,所以不能对s 重新赋值?
2008-08-05 00:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LZ搞清楚字符串是什么东西。一系列字符组成的串叫字符串。显然字符串需要连续的空间。
char name[10];//这个可以[bo]装下[/bo]字符串
char *name; //这个可以[bo]指向[/bo]字符串
换言之,你要完全控制一个字符串,前提是控制字符串本身,而不是指向其的内存。
对于char *name="hello";,你无法控制字符串本身,因为那个字符串是只读的。
对于char str[]="Hello",*name=str;你可以控制字符串str,但是无法控制"Hello"。
如果你想,并且愿意为这种行为付出代价,你可以使用VirtualQueryEx改变字符串所在地址的内存页面属性。不过一切后果你自己负责。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-08-05 09:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
步骤  
  1.   先用VirtualQueryEx   获得你想修改的进程的地址空间  
  DWORD   VirtualQueryEx(  
      HANDLE   hProcess,         //   handle   to   process  
      LPCVOID   lpAddress,     //   address   of   region  
      PMEMORY_BASIC_INFORMATION   lpBuffer,//   address   of   information   buffer                        
      DWORD   dwLength             //   size   of   buffer  
  );  
  2.   获得这个lpAddress了...   然后用  
  BOOL   VirtualProtect(  
      LPVOID   lpAddress,         //   address   of   region   of   committed   pages  
      DWORD   dwSize,                 //   size   of   the   region  
      DWORD   flNewProtect,     //   desired   access   protection  
      PDWORD   lpflOldProtect   //   address   of   variable   to   get   old   protection  
  );  
  //   更改其页面的属性   第三个参数传入PAGE_READWRITE   第一个,第二个参数分别是由1获得的两个冬冬。。。第四个为返回原有的页面属性  
  3.   修改之。。  
  4.用VirtualProtect恢复页面原有属性,前两个参数相同,第三个参数传入2获得的   lpflOldProtect  
  OK...

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-08-05 09:55
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 12# woshiyun 的帖子
char *name="hello";
这种方式第一的常指针name是一个指针,它必须指向一个常字符串
因此可以使用 name="hellodd";重新赋值,因为"hellodd"仍来是一个常字符串
但是不可以用name[3] = 'd' 这种方式赋值,因为name[3] 本身指向的是常字符串中的内容,也而就是一个只读的内容,是这样吗 ?
2008-08-14 10:06
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
sw修改进程空间的api好强

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-08-14 16:22
快速回复:字符串赋值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026403 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved