小明思考

高性能服务器端计算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

VC6==>VS2005的一些问题

Posted on 2005-11-30 17:33 小明 阅读(2758) 评论(3)  编辑 收藏 引用 所属分类: C/C++

我接收到一个任务,是把公司的一个产品从vc6迁移到vs2005,结果发现了很多的warning和error

warning 主要是使用了strcpy,strcat这样的函数
这些在2005中都是unsafe_api.
在vs2005都推荐使用strcpy_s,strcat_s.
我想微软这么做固然跟C++ standard有偏差
但是这些函数的使用确实造成了微软产品经常有的漏洞
微软深受这些函数的危害阿
所以在vs2005这些都是warning

error的类型主要是以下几种,多半和STL有关

1.include 带.h的旧式头文件,比如 #include <iostream.h>改为include <iostream>

2.vc6的string iterator的 char *,而vs2005中却不是
strcpy(s.begin(), str);是不能compile的,应改为strcpy((char *) s.c_str(),str);

3.函数返回类型不支持缺省是int
missing type specifier - int assumed. Note: c++ does not support default-int
<Code>
    extern IsWindowsNT();

<Fix>
    extern int IsWindowsNT();


Feedback

# re: VC6==>VS2005的一些问题  回复  更多评论   

2005-11-30 23:07 by 沐枫网志
如果要保持与标准的兼容性,或不需要微软件的这种警告,可定义宏_CRT_SECURE_NO_DEPRECATE 去掉它.

或者定义
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 为 1
则代码中的strcpy将会变成strcpy_s版本,以利用微软件的_s版本函数.

# re: VC6==>VS2005的一些问题  回复  更多评论   

2005-12-02 13:10 by bw
嘻嘻,辛苦了

# re: VC6==>VS2005的一些问题  回复  更多评论   

2005-12-03 09:14 by 1
第二个仍然是错误的,为什么不直接使用
s = str;
呢?

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理