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()
的情况下刷新输出流,并通过警告让您的编译器尽可能烦人。
我写了这些代码:
#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()
的情况下刷新输出流,并通过警告让您的编译器尽可能烦人。