在Visual Studio 2017中,我遇到了scan_s()
,printl_s()
和char
编写简单的输入和输出应用程序的问题。请查看2个应用程序,并请帮助解释我使用scan_s()
,printl_s()
和char
时出现的问题。
此代码没问题:
#include <stdio.h>
int main() {
char name[30];
printf("Enter name: ");
gets(name); // enter string
printf("Name: ");
puts(name); // display string
_getch();
}
Enter name: Dung_cute
Name: Dung_cute
这是错误的:
#include <stdio.h>
int main() {
char name[20];
printf_s("Enter name: ");
scanf_s("%c", name); // enter string
printf("Your name is: %s.", name);
_getch();
}
Enter name: Dung_cute
Your name is: D?????aietnauie'ai.
答案 0 :(得分:4)
scanf_s要求您还提供要读取的字节数。默认情况下,它只读取一个。
请找到here更多信息。
示例(来自上面的链接):
result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, (unsigned)_countof(s), ws, (unsigned)_countof(ws) );
因此,您的
scanf_s应该类似于:
scanf_s("%c", name, _countof(name));
您可能还需要将类型说明符更改为“%s”。我没有可供测试的Visual Studio。
scanf_s("%s", name, _countof(name));
^
答案 1 :(得分:0)
无论您从中学到什么资源,都应立即停止。
用C语言编程很危险,建议使用gets
函数的所有资源都无法胜任。如果您继续使用此资源进行学习,您将编写的代码始终崩溃,并且将存在诸如缓冲区溢出之类的安全漏洞。