最近新学c语言,使用scanf_s不会用

在coldeblock中这样写程序没问题
这是看视频里头实践的一个 并且在coldblock中是能使用MAX的,在vs2017里头没法用
char names[6][20] = { "...","..","...","...","...." };
scanf("%s,names[count]");
我后来使用vs2017因为只能用scanf_s
这个就不会写了程序总是报警告然后运行就闪退 74行就是那句scanf_s("%s,names[count]");
1>c:\users\fiona\source\repos\project1\project1\源.c(74): warning C4473: “scanf_s”: 没有为格式字符串传递足够的参数
1>c:\users\fiona\source\repos\project1\project1\源.c(74): note: 占位符和其参数预计 2 可变参数,但提供的却是 0 参数
1>c:\users\fiona\source\repos\project1\project1\源.c(74): note: 缺失的可变参数 1 为格式字符串“%s”所需
1>c:\users\fiona\source\repos\project1\project1\源.c(74): note: 此参数由转换说明符使用

第1个回答  2017-10-07
如果还是想用scanf把安全警告关闭就可以了,
在最开始处#define _CRT_SECURE_NO_WARNINGS
如果想用scanf_s那么你可以点到这个上面,会有接收的参数类型;右键转到定义,虽然看不到函数实现,但是可以看到函数原型,
再看你的代码scanf("%s,names[count]"); 是不是这里也错了追问

那句话在coldeblock 里头没问题的。。我跟着视屏学的,没有说为什么需要将names[count]放入冒号内,我在vs上面也没想过要把这个放冒号外面过,20这个我倒是在网上查到需要加上去的

只不过我不知道这个怎么加。。strcpy_s我看见了那个是有提示的所以我自己解决了,scanf_s后面就一串...

还有转到定义了怎么看呢,或者说我该学哪种书里头的才能去看懂这个呢

追答

scanf("%s,names[count]"); 这个放在里面和放在外面的区别是你输入的时候也需要输入,names[count]这些字符,而不是编译不通过;但是这个"外面没有内容,那么严谨的编译器至少会发出警告的;
...是可变参数;是函数有关的知识;
要看懂微软的那些定义不容易,我也大多看不懂(我不做桌面开发,说实话对windows系统也不了解,只知道他是微内核,不过你去看MFC系列的书可能可以看懂微软的那些宏,我不确定,因为我没有学过);
转到定义是看函数原型的,这个应该好点的IDE都有;

最后就是,如果你确定你是看视频上是这么写的,那么我劝你还是不要看这个视频了;我觉得没有老师会写
char names[6][20] = { "...","..","...","...","...." };
scanf("%s,names[count]");
这种代码的; 不排除那个老师现场敲代码敲错的情况下,如果确定2行代码是连续的;那么这个老师误人子弟了;因为不会有人这么初始化;
C语言的书几乎都不用推荐,多买几本别人推荐的,都看下,应该比视频学的快,

第2个回答  2017-10-07
scanf_s("%s",names[count],20);

追问

居然这样就行。。。我想问问为什么之前name[count]要在冒号里头呢。。。因为我后来都是把这个放冒号里头的。。。那视频里头也没说这个。,,

本回答被提问者采纳
相似回答