自己学c语言遇到的问题

1. error C1854

错误 1 error C1853: “Debug\xx.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

这个错误出自用visual studio 2012,在visual c++的控制台上写c语言的程序时遇到的。
这主要是因为C++编译器不兼容C文件的预编译头,得将C文件设置为不适用预编译头。
在VS2012中选中报错的C文件,在右键菜单中选择“属性”,之后在属性页窗口的左侧“配置属性”中选择“C/C+±>预编译头”,在右侧的“预编译头”栏中选择“不适用预编译头”。
预编译头
这里说的预编译头是指,对于每个cpp文件,C++编译器是对其进行单独编译的。而对于文件中的#include包含的头文件等代码要进行文本替换,生成编译单元。而头文件可能被多个cpp文件包含,这样,每次编译cpp文件时,都要对头文件进行一次编译,也就是说,头文件被多次重复编译,浪费了编译时间。因此,C++编译器使用预编译(precompiled)的方式,预先把这些头文件进行编译,得到一个pch文件(precompiled header),当包含该头文件的cpp文件被编译时,只需使用该头文件对应的pch文件即可,无需再对头文件进行重复编译。

2.scanf与scanf_s的区别

scanf()不会检查输入边界,可能造成数据溢出,scanf_s()会进行边界检查。
如对于name[5],
scanf(“%s”,name),如果输入abcdefgh,则会使得fgh溢出进入其他地方,造成程序错误,容易被黑客利用;
而scanf_s(“%s”,name),则会只会接收前5个输入,其后的无效,避免了程序的漏洞。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值