C语言 字符串常量 指针

2020-02-04 09:08发布

最近在看C,写了以下测试程序
char *p="string";
void main()
{
*(p+3) = '';
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中编译通过
[img]file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/765350744/QQ/WinTemp/RichOle/[{[FM`Q%K((}GH`N}(}I95X.jpg[/img]

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







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
guozaizb
1楼-- · 2020-02-04 12:33
你想多了,改的是存储器的值
albert_w
2楼-- · 2020-02-04 13:50
比如avr下面gcc把字符串放内存的,就可以改。tc也许放代码段再拷贝过来的。正确做法是用const char*

一周热门 更多>