回 帖 发 新 帖 刷新版面

主题:再谈指针-----------资深程序员请进

char *s="win";
   *s='p';
   printf(s);
这在TC中是可以的,但在VC中会执行出错,为什么,
如果是TC老,可教科书有这么写的。有资深的程序员,可以解释吗?
还是那里写错了,我可以按照教书上写的。???
如果以前的教材老了,那么现在的写法是什么????

回复列表 (共4个回复)

沙发

楼主
char *s="win";
   *s='p';
   printf(s);
这在TC中是可以的,但在VC中会执行出错,为什么, 

--------------------------------------------------------------------------

我不是资深程序员,TC我也没用过,如果在TC中可以运行正确,只能说是编译器的不同,char *s="win";如此声明的字符缓冲区存放在进程的常量区,是不允许修改的。但是也不是绝对 的,你也可以通过某些手段修改表面上不能修改的东西。。。但是在VC++中,这是不允许的。

板凳


楼上正解~~ 确实是这样  在程序中   "XXXX"  是常量  所以  *p指向的是 常量空间 不允许被修改的  你可以 在 堆区开辟空间  然后处理就可以更新数据   或者利用数组的方式都可以

3 楼

[quote]char *s="win";
*s='p';
[/quote]
在古代是可以的
后来有了ANSI C
也就是C标准
认为字符串的本质是 const char *
(这里可能还有Bjarne Stroustrup的影响)
因此后来的编译器都把对字符串常量中字符的修改作为非法
但是K&R对此不以为然
一直坚持对字符串常量中字符的修改是一个未定义行为

4 楼


明白了,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册