c++学习笔记:scanf()与scanf_s()

区别及注意事项

scanf() 函数:

  • scanf() 函数是格式化输入函数,从键盘读取输入的信息。

  • 调用格式:scanf("<格式化字符串>", <地址表>)。

  • 由于没有限定字符串长度,可能会导致内存泄漏,故C++中不建议使用该函数。

scanf_s() 函数:

  • scanf_s() 的功能和scanf() 完全相同,但比后者更加安全。因为 scanf_s() 是针对先前提到的问题而设计的。
  • scanf_s() 用于读取字符串时,必须提供一个数字来表明最多读取多少位的字符,这样可以防止溢出。

补充

关于空格的输入:

scanf是这样设计的,以%s输入时,字符中间的空格和其后的内容都会被忽略,即在输出的时候无法完整输出。

如果有读取空格的要求,参考以下代码:

1
2
3
4
5
6
7
8

int ()
{
char str[128];
scanf( "%[^n]", str );
printf( "%sn", str );
return 0;
}