即使代码正确,我也无法输入值而不会弹出错误。
#include <stdio.h>
int main()
{
char name[100];
printf("Enter your name: ");
scanf_s("%s", name);
printf("Your Name is: %s", name);
return 0;
}
只要我输入一个名称并按回车键,就会弹出一条错误消息并说:
Unhandled exception at 0x0FC13FD4 (msvcr120d.dll) in Project8.exe: 0xC0000005: Access violation writing location 0x00D40000.
造成这种情况的原因是什么以及如何解决?
答案 0 :(得分:2)
您应该使用fgets代替
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
if (fgets(name, sizeof(name), stdin) == NULL)
return 1;
printf("Your Name is: %s", name);
return 0;
}
答案 1 :(得分:1)
试试这个
if (scanf_s("%99s", name, _countof(name)) == 1)
printf("Your Name is: %s", name);
两件事
scanf_s()
是一个缓冲区溢出安全函数,它需要"%s"
说明符的长度参数。
如果您确实成功扫描了值printf()
,那么您应该只前进(scanf(...) == 1)
。
那里的1
表示由说明符匹配的输入参数之一,因为在这种情况下只有其中一个,那么它将表示完全匹配。
另外,我几乎可以确定_countof()
宏定义为sizeof(x) / sizeof(x[0])
所以这也应该这样做
if (scanf_s("%99s", name, sizeof(name)) == 1)
printf("Your Name is: %s", name);
因为在这种情况下sizeof(name[0]) == sizeof(char) == 1
。
如果您使用标准scanf()
函数,即
if (scanf("%99s", name) == 1)
printf("Your Name is: %s", name);