scanf_s不适用于Visual Studio C ++ 2010 Express中的printf

时间:2015-02-21 15:05:24

标签: c visual-studio-2010

我写了这些代码:

#include <stdio.h>
int main(void)
{
    char input[50]={0};
    scanf_s("%s",input);
    printf("%s",input);
    return 0;
}

当我在发布模式下运行它(Ctrl + F5)时,它不会打印任何内容,但在调试模式下(F5)它会执行,并且没有错误。在发布模式下,控制台屏幕是这样的:

abcd
Press any key to continue . . .

第一行是我的输入,这是调试模式下的屏幕:

abcd
abcdPress any key to continue . . .

当我使用scanf而不是scanf_s时,它会在调试和释放模式下进行打印。我错过了什么?

1 个答案:

答案 0 :(得分:2)

此版本的scanf()需要多一个参数,正确的方法是

scanf_s("%49s", input, 50);

并且,scanf()返回一个值,你不应该忽略它,永远不会

if (scanf_s("%49s", input, 50) == 1)
    printf("%s\n", input);

另外,添加'\n'以刷新输出流而不需要fflush(),并使警告尽可能让编译器变得烦人。