作者shadown (本帐号已停止使用)
看板C_and_CPP
标题[问题] 字串与指标的问题
时间Tue Apr 21 19:30:08 2009
请问一下,下面这个方法为什会执行时会出现错误呢?
void main()
{
char *a="i am a boy";
a[2]='A';
cout << a << "!!!\n";
}
若是将 char *a 改为 char a[20] 就可以了,不知道为什麽..@@
ps.(1)我用的是VC6
(2)编译可以过,不过执行时会出现错误
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.117.77
※ 编辑: shadown 来自: 220.133.117.77 (04/21 19:30)
※ 编辑: shadown 来自: 220.133.117.77 (04/21 19:31)
※ 编辑: shadown 来自: 220.133.117.77 (04/21 19:33)
1F:推 VictorTom:char *a="i am a boy"; 代表ptr a指到一个const char 04/21 19:42
2F:→ VictorTom:array里面的内容是"i am a boy"; 因为是const, 所以你 04/21 19:43
3F:→ VictorTom:a[2] = 'A'; 尝试去改一个const自然就错了.... 04/21 19:43
4F:→ VictorTom:改char a[20]可以是因为它是一个阵列a有20个char的空间 04/21 19:44
5F:→ VictorTom:里面给initial值为"i am a boy", 所以写a[2]是合法的:) 04/21 19:44
6F:→ VictorTom:编译可以过代表语法是正确的, 但是执行时才发现你语意不 04/21 19:45
7F:→ VictorTom:对; 比如你可以char b[20]={...}; char *a=b; a[2]='A'; 04/21 19:46
8F:推 VictorTom:所以原来那样的code, compiler是不负责帮你抓error的. 04/21 19:50
9F:推 ledia:置底十之四 04/21 19:51
10F:→ VictorTom:呜呜~~我推那里辛苦, 又想不出来看过哪里有解释了Q_Q~ 04/21 19:52
11F:推 LiloHuang:存取 read-only text section 的常见问题 04/21 19:55
12F:→ shadown:原来这样的宣告方式算是常数,谢谢~(置底那个我看不太懂..) 04/21 19:55
13F:→ LiloHuang:你如果是用 char [] 的话 他会做一次拷贝 04/21 19:55
14F:→ LiloHuang:有兴趣 objdump 或者 gcc -S 看一下 asm 就了改哩 04/21 19:56