这样使用常量字符串会不会有危险?

kx008 2005-03-22 05:39:16
一个全局指针数组:
const char *g_String[100];
在程序入口函数中对此数组进行初始化,对其成员赋值:
g_String[STR_ID1] = "字符串1";
g_String[STR_ID2] = "字符串2";
...
然后在整个程序的其他地方使用g_String[STR_IDn]来代替原来的字符串常量,
便于对字符串常量进行统一管理。
现在我担心这样使用常量字符串会不会有危险?字符串常量在内存中应该是有
相对固定地址的吧,但程序入口函数执行过后,那段内存会不会被程序的其他
代码段覆盖?
...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kx008 2005-03-24
  • 打赏
  • 举报
回复
数组是常量指针数组,因此我不用担心修改它的内容会造成异常,我担心的是,数组是全局数组,在整个程序生命周期内有效,而用来初始化它的字符串常量是属于程序入口函数的,当这个函数执行完毕后,那些字符串常量所存在的空间是否会被其他代码覆盖(当然了,我不会自己写代码去覆盖它),如果被覆盖了,那么在使用全局指针数组的时候将得到一串乱码。
进程的内存是由操作系统管理的吧,我对操作系统不熟悉,虽然我这个用法在使用过程中尚未出现问题,但我还是不放心,所以想请这方面的高手来讲解一下。
cnwww 2005-03-24
  • 打赏
  • 举报
回复
可以这样用。试试就知道了,Debug下运行一遍就可以知道有否内存问题。
jerry 2005-03-24
  • 打赏
  • 举报
回复
楼上的担心是没有根据的. "asbbfedf",这样写的字符串是静太串, 根本不会分配空间,所以也不用释放. 这些数据会保存在EXE的一个常量区内.加载到内存的也是一块常量,只读内存! 是只读的, 不用担心被修改, 在整个进程的时间里都会保持不变的, 除非你使用变态的方式去改变它(要Rang0权限才能修改这样的内存,否则你写试试: 非法操作! 操作系统将你杀死.
jerry 2005-03-23
  • 打赏
  • 举报
回复
这样不用分配什么内存啊.都是静态串. 不过这样的串是不能修改的,否则非法操作等着你
菜牛 2005-03-23
  • 打赏
  • 举报
回复
没问题。
mybios 2005-03-22
  • 打赏
  • 举报
回复
这样用完后要delete[]哦。。
oyljerry 2005-03-22
  • 打赏
  • 举报
回复
可以把那些字符常量放到string table中
oyljerry 2005-03-22
  • 打赏
  • 举报
回复
常量存储去,一块单独的数据存储区,不允许修改
楼主的赋值,需要先分配内存空间
adamx 2005-03-22
  • 打赏
  • 举报
回复
常量存储区,是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
adamx 2005-03-22
  • 打赏
  • 举报
回复
可以这样用。
Daniel22_cn 2005-03-22
  • 打赏
  • 举报
回复
const char g_String[100];
bobob 2005-03-22
  • 打赏
  • 举报
回复
寒~没有分配内存~
DentistryDoctor 2005-03-22
  • 打赏
  • 举报
回复
这样显然不行,内存在哪分配的?
bobob 2005-03-22
  • 打赏
  • 举报
回复
不会的

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧