请教一个驱动中对于字符串指针二次赋值的问题

jw212 2010-09-28 02:01:56
一个很简单的程序:
char * string1= "hello";
//KdPrint(("AnsiString1:%Z\n",string1));//打印hello
printf("AnsiString1:%s\n",string1);//打印hello
string1[0]='H';
string1[1]='E';
string1[2]='L';
string1[3]='L';
string1[4]='O';
//KdPrint(("AnsiString1:%Z\n",string1));//打印HELLO
printf("AnsiString1:%s\n",string1);//打印hello
string1类似于const char*,hello位于常量储存区,一般说来初始化后string指向的值不能再被改变,否则会造成运行时错误(编译可以通过),即string1[0]='H';会出问题!(我用vc6.0验证过了)

但是我在驱动中加入类似的代码
CHAR * string1= "hello";
KdPrint(("AnsiString1:%s\n",string1));//打印hello
string1[0]='H';
string1[1]='E';
string1[2]='L';
string1[3]='L';
string1[4]='O';
KdPrint(("AnsiString1:%s\n",string1));//打印hello

却可以正常打印出来sting1的值?
请教高人有没有见解呢?

以上例子来于 windows驱动开发技术详解 这本书;
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
HellMoxi 2010-10-05
  • 打赏
  • 举报
回复
在某些编译器上,有时确实不一样!!
memoleak 2010-10-01
  • 打赏
  • 举报
回复
char * string1= "hello";写法是不对的,隐含了一次类型转换(从const char* 到char*)。这样会导致你的程序不可移植。编译器并不一定总把hello放到const data段。所以在某些编译器和某些平台下运行可能会正确。
cnzdgs 2010-09-28
  • 打赏
  • 举报
回复
程序在被调试状态下与实际运行是有差异的,估计是调试器将常量区改成了可写。
codesnail 2010-09-28
  • 打赏
  • 举报
回复
另:纠正楼主一个说法,没有“字符串指针”,只有“字符指针”。
codesnail 2010-09-28
  • 打赏
  • 举报
回复
应该是与编译器有关。
编译器让常量区可修改也没办法。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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