. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
C/C++语言
主题 : :
请教:char *p="abcdef"和char s[]="abcdef"存储在哪里的问题!
[待解决]
回复[
8
次 ] 点击[
1277
次 ]
crazyman
[帖 主]
[ 发表时间:2008-11-09 17:12 ]
荣誉值:152
信誉值:3
注册日期:2008-01-24 21:26
#include <stdio.h>
int main()
{
char *p="abcdef"; //很多书上说:p在栈,“abcdef”在数据区
p[2]='W';
printf(p);
getchar();
return 0;
}
这个程序编译通过,但是问什么程序运行会出错?
另一个:
#include <stdio.h>
int main()
{
char s[]="abcdef";//s在栈,“abcdef”在数据区
s[2]='W';
printf(s);
getchar();
return 0;
}
这个程序能够正常输出!
请问这是为什么?
p,s和“abcdef”分别在那个区?
mytbk
[第
2
楼]
[ 回复时间:2008-11-14 14:19 ]
荣誉值:0
信誉值:0
注册日期:2008-07-19 20:02
在TC中测试发现char *p="abcdef";中字符串的确当字符数组常量对待,如果在保护模式下的编译器编译此程序,将会发生段访问异常.而在第二个程序中,字符串是放在栈中的,而在保护模式下,栈段是可写的.
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved