2 zhang125c zhang125c 于 2015.05.25 11:26 提问

C语言学习过程中遇到的问题

我用VS12013写C程序时代码调试过程中会显示有错误:某个函数调用的参数太少,这是什么意思啊?不知道应该怎么解决,还有另一个问题就是,我用VS2013写C程序中调用某些函数时要在函数名后面加_s,比如scanf_s, strcpy_s,这是为什么呢,我不知道用哪些函数是要加,哪些不用加,拜托哪位懂的帮我解答一下,非常感谢~~

10个回答

caozhy
caozhy   Ds   Rxr 2015.05.25 11:49
已采纳

(1)参数太少就是一个函数比如有2个参数,你调用的时候只传了一个
(2)加上_s是这些函数的安全版本,所谓安全,就是有额外的判断和处理防止缓冲区溢出类的攻击

zhang125c
zhang125c 好的,真的非常感谢~~
2 年多之前 回复
wsh1992o
wsh1992o   Rxr 2015.05.25 12:45

如果一个函数的参数列表中的参数为为非可选参数,那么函数被引用时传进来的实参必须得满足顺序,数量,对应类型

pbymw8iwm
pbymw8iwm   2015.05.25 16:51

穿的参数和实际上的函数声明里的参数不一样,少了,最好看一下man 函数名

zhang125c
zhang125c 嗯嗯,好的,谢谢啊~
2 年多之前 回复
qq_28435665
qq_28435665   2015.05.25 11:49

没有导入 <>吧

Trent1985
Trent1985   2015.05.25 12:34

一般不需要加的,你看下是否少include了什么,至于某函数调用的参数太少,应该是你参数传递问题。

nswcfd
nswcfd   2015.05.25 14:07

caozhy正解。
PS,strcpy_s不是标准库的一部分吧?貌似是VS自己的吧。

zhang125c
zhang125c 嗯,是的,只是在VS中需要
2 年多之前 回复
a1193561652
a1193561652   Rxr 2015.05.25 15:43

某个函数调用的参数太少,就是你少些了几个参数,你输入完函数名再输入"(",后面就会有参数列表,自己看看要哪些参数。
scanf_s()之类的是VS自己弄的一些函数,好像是说比较安全,我同学的VS2013也是这个问题,也还不知道怎么scanf()。

alwaysalex
alwaysalex   2015.05.25 16:08

参数缺少的问题楼主好好检查一下添加进去即可;

对于_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()。在调用时,必须提供一个数字以表明最多读取多少位字符。

u012377333
u012377333   Rxr 2015.05.25 19:04

楼上的写得不错啊,字面的意思写得很明白

jiangqi88521
jiangqi88521   2015.05.29 15:26

函数调用时传的参数与定义函数时形参数不相等

Csdn user default icon
上传中...
上传图片
插入图片