- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vs-c2010入门教vs-c2010入门教程vs-c2010入门教程vs-c2010入门教程
???第四章VC2010中初学者常见错误、警告和问题
????????? 这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。
???????? iostream.h与iostream
???????? 下面的代码为什么在VC2010下面编译不过去?
#include iostream.h
int main(){coutHello World.endl;return 0;}
??????? 错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory
??????? 造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用iostream头文件来代替,你甚至可以认为iostream是这样定义的:
????? namespace std
????? {
????????????? #include iostream.h
???? }
???? 因此我们可以简单的修改我们的Hello World。
???? #include iostreamusing namespace std;
int main(){coutHello World.endl;return 0;}
?????? iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了iostream。而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。但是它们依然有对应的C++版本,如cstdio cstdlib等。记住,在VC2010上面采用C++风格的头文件而不是C风格的头文件,除非你是在用C。
?????? warning C4996
???????? 这是一个警告,请看下面的代码:
#include iostreamusing namespace std;
int main(){char sz[128] = {0};strcpy( sz, Hello World! );cout sz endl;
return 0;}
?????? 上面的strcpy会产生这个警告:
?????? warning C4996: strcpy: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
?????? 这是因为VC从2005版本开始,微软引入了一系列的安全加强的函数来增强CRT(C运行时),这里对应的是strcpy_s。_s意为safe的意思,同样的道理,strcat也是同样。因此要解决这个问题,我们可以用strcpy_s来替换strcpy,但是注意strcpy_s并非所有编译器都提供,因此如果要跨编译器,请采用错误信息中所提示的方式,定义_CRT_SECURE_NO_WARNINGS宏来掩耳盗铃吧。另外注意并非所有的加强函数都是在屁股后面加_s,比如stricmp这个字符串比较函数的增强版名字是_stricmp。下面,用strcpy_s来更改程序:
int main(){char sz[128] = {0};strcpy_s( sz, Hello World! );cout sz endl;
char* pSz2 = new char[128];
strcpy_s( pSz2, 128, hello);cout pSz2 endl;delete pSz2;
return 0;}
??????? 注意,strcpy_s有两个版本,一个可以帮助我们自动推断缓冲区的大小,而另外一个不能帮助我们推断,因此在编译器不能推断缓冲区大小的时候,我们需要自己指定缓冲区的大小,如上面的程序所演示的那样,关于增强版的函数请参考我写的《深入学习C++ String2.1版》。
?????? TCHAR、wchar_t、char
?????? 请大家看下面这个程序:
#include iostream#include Windows.h#include tchar.husing namespace std;
int main(){MessageBox( NULL, 你好HelloWorld!, Information, 0 )
您可能关注的文档
- unit3 book1 检unit3 book1 检测unit3 book1 检测unit3 book1 检测.ppt
- unit2 writingnit2 writingunit2 writingunit2 writing.ppt
- unit2 readingppt课件unit2 reading ppt课件unit2 reading ppt课件unit2 reading ppt课件.ppt
- unit3 teenageproblems 课件1unit3 teenage problems 课件1unit3 teenage problems 课件1unit3 teenage problems 课件1.ppt
- unit3《computes》word studyunit3《computers》word studyunit3《computers》word studyunit3《computers》word study.ppt
- unit2第2课时教学课件nit2第2课时教学课件unit2第2课时教学课件unit2第2课时教学课件.ppt
- unit4 section-2unit4 sectionb-2unit4 sectionb-2unit4 sectionb-2.ppt
- unit3_a_healty_life课件unit3_a_healthy_life课件unit3_a_healthy_life课件unit3_a_healthy_life课件.ppt
- unit4 sectionb 1a-2funit4 section b 1a-2funit4 section b 1a-2funit4 section b 1a-2f.ppt
- unit5 there i a big bed第一课时unit5 there is a big bed第一课时unit5 there is a big bed第一课时unit5 there is a big bed第一课时.ppt
文档评论(0)