追日填海 发表于 2012-4-22 08:23:31

C语言 字符串常量 指针

最近在看C,写了以下测试程序
char *p="string";
void main()
{
*(p+3) = '\0';
while(1);
}
一开始我认为编译是无法通过的,因为这里试图去修改一个字符串常量中的值。
在VC6.0中编译通过file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/765350744/QQ/WinTemp/RichOle/%NRQKQQ4@WHT2W6TD2`NV3C.jpg
但是无法运行
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/765350744/QQ/WinTemp/RichOle/Z@T{BXVAZ{NV94]ED824EUB.jpg
在TC2.0中编译通过
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/765350744/QQ/WinTemp/RichOle/[{

并且可以正常运行
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/765350744/QQ/WinTemp/RichOle/@10_TL_X76O9A6M6CCVR$
不明白为什么会是这样的结果,请高手指点,谢谢!







guozaizb 发表于 2012-4-22 09:55:50

你想多了,改的是存储器的值

albert_w 发表于 2012-4-22 10:08:43

比如avr下面gcc把字符串放内存的,就可以改。tc也许放代码段再拷贝过来的。正确做法是用const char*
页: [1]
查看完整版本: C语言 字符串常量 指针