我用VS12013写C程序时代码调试过程中会显示有错误:某个函数调用的参数太少,这是什么意思啊?不知道应该怎么解决,还有另一个问题就是,我用VS2013写C程序中调用某些函数时要在函数名后面加_s,比如scanf_s, strcpy_s,这是为什么呢,我不知道用哪些函数是要加,哪些不用加,拜托哪位懂的帮我解答一下,非常感谢~~
(1)参数太少就是一个函数比如有2个参数,你调用的时候只传了一个
(2)加上_s是这些函数的安全版本,所谓安全,就是有额外的判断和处理防止缓冲区溢出类的攻击
没有导入 <>吧
一般不需要加的,你看下是否少include了什么,至于某函数调用的参数太少,应该是你参数传递问题。
如果一个函数的参数列表中的参数为为非可选参数,那么函数被引用时传进来的实参必须得满足顺序,数量,对应类型
caozhy正解。
PS,strcpy_s不是标准库的一部分吧?貌似是VS自己的吧。
某个函数调用的参数太少,就是你少些了几个参数,你输入完函数名再输入"(",后面就会有参数列表,自己看看要哪些参数。
scanf_s()之类的是VS自己弄的一些函数,好像是说比较安全,我同学的VS2013也是这个问题,也还不知道怎么scanf()。
参数缺少的问题楼主好好检查一下添加进去即可;
对于_s问题,事实上,这些加了_s的函数是VS本身的一些函数。拿scanf_s举例来说,ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节
char buf[5]={'\0'};
scanf("%s", buf);
如果输入1234567890,后面的部分会被写到别的空间上去。
以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取4个字符,因为buf[4]要放'\0'
scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符.
vc++2005/2008中提供了scanf_s(),在最新的VS2013中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。
楼上的写得不错啊,字面的意思写得很明白
函数调用时传的参数与定义函数时形参数不相等