【发布时间】:2019-04-05 16:16:57
【问题描述】:
根据书上:How to C Programming - Eighth Edition (by Deitel brothers)这段代码读的是“Hello”这个词:
#define SIZE 20
int main()
{
char MyStr[SIZE];
printf("Enter your word: ");
scanf("%19s", MyStr);
}
此图来自Sixth Edition online:
但是当我这样做时:
int main()
{
char MyStr[20];
printf("Enter your word: ");
scanf_s("%19s", MyStr);
}
我收到访问冲突错误:
我做错了什么?
【问题讨论】:
-
我推荐你read the documentation for
scanf_s。这是一个特殊的函数,在某些情况下需要特殊的额外参数。 -
"
scanf_s要求为 c、C、s、S 或 [ 类型的所有输入参数指定缓冲区大小。缓冲区大小作为附加参数传递,紧随其后指向缓冲区或变量的指针。" -
你掉进了微软告诉你使用
scanf_s并谎称scanf不是“安全”之类的陷阱 - 在scanf和scanf_s鉴于书中的格式。 -
@Someprogrammerdude 这不是
scanf_s的文档。它位于标准的附件 K,“边界检查接口”。 -
@Lundin 不幸的是,Visual Studio 有自己的“安全”函数变体,它们与同名的标准函数相似但不同(至少它们曾经有点不同) .