VC++ C++ C# Algorithm

C++博客 首页 新随笔 联系 聚合 管理
  21 Posts :: 3 Stories :: 31 Comments :: 0 Trackbacks
#include  < stdio.h >
#include 
< string .h >
int  main( int  argc,  char   * argv[])  {
 
int  i  =   1
;
 
char  buf[ 4
];
  strcpy(buf, 
" AAAA "
);
  printf(
" %d\n "
, i);
 
return   0
;
}

这是一道C++面试题目,问在x86平台上为什么不能输出想要的结果。
char   * mycopy( char   *  dst, char   *  src)
{
    
char   *  cp =
dst;
    
while ( * cp ++=* src ++
);
    
return
 dst;

}
以上面就是strcpy的实现,其中没有对边界进行检查,可以看到该函数把'0\'也复制到目的串内存中去了,而目的串申请的空间不够,就把'\0'复制到i的内存中去了,x86又是littleedian(低位字节地址小),原来i内存结构是0x01 00 00 00  现在成0x 00 00 00 00,所以输出0了。

注:我在Dev-C++中确实是输出0,在VS2003中出来一个运行时检测错误,说buf附近栈崩了,但输出还是1,不知道是不是VS没做对'\0'的复制。
posted on 2006-12-13 15:41 大熊猫 阅读(986) 评论(2)  编辑 收藏 引用

Feedback

# re: 一道c++的面试题目 2006-12-25 13:40 Dain
跟编译器有关了  回复  更多评论
  

# re: 一道c++的面试题目 2006-12-30 23:04 xylary
我用gcc编译输出是8257 用vc的cl编译是1   回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理