为什么我不能输入值?

时间:2015-02-10 22:50:52

标签: c visual-studio-2013 scanf

即使代码正确,我也无法输入值而不会弹出错误。

#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.

造成这种情况的原因是什么以及如何解决?

2 个答案:

答案 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);

两件事

  1. scanf_s()是一个缓冲区溢出安全函数,它需要"%s"说明符的长度参数。

  2. 如果您确实成功扫描了值printf(),那么您应该只前进(scanf(...) == 1)

    那里的1表示由说明符匹配的输入参数之一,因为在这种情况下只有其中一个,那么它将表示完全匹配。

  3. 另外,我几乎可以确定_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);