. : : 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