关于scanf_s的一个坑。

最近帮朋友做一个项目,我是用VS2017做的。VS2017中,C语言用scanf函数会报错,必须用scanf_s才能运行。scanf的格式是scanf("%s",name),但是scanf_s必须在后面加上前面定义的数组大小。比如char name[20];
则scanf_s的格式就得是scanf_s("%s",name,20);

帮朋友做的这个项目过程中,感觉自身的编程能力还需要加强。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
scanfscanf_s都是C语言中用于输入的函数,用来从标准输入流读取数据。二者的使用方式和参数都有所不同。 scanf函数是C语言标准库提供的函数,使用较为简单,通常用于读取基本数据类型(如整型、浮点型、字符型等)。它的函数原型为: int scanf(const char *format, ...); 其中,format参数是一个格式字符串,用来指定输入的数据类型和格式,其他参数是读取到的数据的地址。scanf函数会根据format字符串的格式要求,将输入的内容转换为对应的数据类型,并存储到指定的地址中。 而scanf_s函数是安全版本的scanf函数,它在读取字符串时会进行安全性检查,以防止缓冲区溢出的问题。scanf_s的函数原型为: int scanf_s(const char *format, ...); scanf_s函数的使用方式与scanf函数基本相同,但是在读取字符串时需要指定缓冲区的大小。 具体来说,scanf_s函数需要在读取字符串时指定缓冲区的大小,以避免发生缓冲区溢出的问题。因此,scanf_s函数的格式字符串中需要包含一个指定缓冲区大小的修饰符“%s”之前添加一个整数参数。例如,使用scanf_s函数读取一个字符串的代码可以如下所示: char arr[10]; scanf_s("%9s", arr, sizeof(arr)); 上述代码中,"%9s"表示读取一个最多包含9个字符的字符串,并将其存储到arr数组中。由于arr数组的大小为10,因此可以确保读取的字符串不会导致数组溢出。 综上所述,scanfscanf_s都是用于输入的函数,其中scanf_s是scanf的安全版本,用于防止缓冲区溢出的问题。scanf函数在各种编译器上都能够通用,而scanf_s函数在一些编译器上可能不支持。因此,在编写代码时需要根据具体情况选择适合的函数来进行输入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值