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

scanf_s doesn't work with printf in Visual Studio C++ 2010 Express

我写了这些代码:

#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 时,它会在调试和发布模式下打印。我错过了什么?

这个版本的scanf()需要多一个参数,正确的调用方式是

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

还有,scanf() returns一个值,你不应该忽略它,永远不要

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

此外,添加 '\n' 以在不需要 fflush() 的情况下刷新输出流,并通过警告让您的编译器尽可能烦人。