zhang125c
abcde125c
采纳率75%
2015-05-25 03:26

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

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

10条回答

  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

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

    点赞 3 评论 复制链接分享
  • wsh1992o 存钱买冰棍 6年前

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

    点赞 2 评论 复制链接分享
  • pbymw8iwm 高司机 6年前

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

    点赞 1 评论 复制链接分享
  • jiangqi88521 蒋生 6年前

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

    点赞 评论 复制链接分享
  • u012377333 一枪尽骚丶魂 6年前

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

    点赞 评论 复制链接分享
  • alwaysalex alwaysalex 6年前

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

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

    点赞 评论 复制链接分享
  • a1193561652 纵横车 6年前

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

    点赞 评论 复制链接分享
  • nswcfd nswcfd 6年前

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

    点赞 评论 复制链接分享
  • Trent1985 Trent1985 6年前

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

    点赞 评论 复制链接分享
  • qq_28435665 qq_28435665 6年前

    没有导入 <>吧

    点赞 评论 复制链接分享

相关推荐