回“
小子也大叔”:
winNT系统加强了进程内存管理,把每个进程的虚拟4G空间分为两大部份,低2G归用户所有,高2G归系统所有。用户不得访问系统的空间,连读都不行,更别说写了,自然可以避免应用程序乱用指针修改内存。想想你随便用个指针就改写了系统内核,这种系统是不是一天可能崩溃N次,蓝屏大家都见过吧。
在回楼主:
你还没有搞懂怎样输出一个字符串。用printf()输出int,char,float等类型时都是把
要输出的值传给printf(),比如int a;printf("%d",a);在输出字符串时情况就不一样了,要把
字符串的首地址给printf(),当printf读到"%s"时它就会把你给它的值当作字符串的首地址,然后访问那段内存,a[10]中可能放着一个比较大的数如0x10000000,即a[10]==0x10000000,printf把0x10000000理解为内存地址去访问,正好访问到了系统不允许它 read的内存。输出字符串的正确方法是printf("%s",&a[0]);&a[0]就是首元素地址嘛,不过没有这么麻烦,因为c 中定义数组名代表首元素地址,所以可以简单写为printf("%s",a),因为a==&a[0]
如果说你的书上没有讲怎样输出一个字符串,那你赶紧把那本书塞到垃圾桶中,如果讲了,想想你为什么不知道.
楼主这个阶段的还是认真看书,少来网上泡.