这段代码崩溃了:
scanf_s("%c %d",&ch,&x);//Run error
但这段代码有效:
scanf_s("%c",&ch);
scanf_s("%d",&x);//Run succeed
我想知道为什么第一个代码片段是错误的。
“运行错误”的意思是
当我运行程序输入时,编译器有警告并且出现问题
当你正在使用scanf_s
(相比之下scanf
),您需要提供一个额外的长度参数%c
(例如,参见this https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l?view=vs-2019微软的文件关于scanf_s
):
与 scanf 和 wscanf 不同,scanf_s 和 wscanf_s 要求您指定
某些参数的缓冲区大小。指定所有 c、C、s 的尺寸,
S,或字符串控制集[]参数。
所以你必须写
scanf_s ("%c %d", &ch, 1, &x);
表明第一个%c
最多读取一个字符。
注意scanf_s("%c",&ch);
应该发出相同的警告/错误,因为它缺少强制长度参数%c
, too.
Command scanf_s("%d",&x);
,相反,可以作为%d
不需要(不得提供)额外的长度参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)