差异btw得到,scanf('%s'),getline

时间:2016-04-08 06:19:33

标签: c++ c std

我正在阅读关于quora的this问题并且读到谷歌在其中一次采访中提出了这个问题,

这些功能有什么区别: scanf("%s"),获取和获取线

任何人都可以提供详尽的清单及其解释。

1 个答案:

答案 0 :(得分:4)

scanf("%s", &buffer);在输入中读取下一个标记(行/列表的任何空格/结尾将结束标记)并将其存储在char *buffer中。您应该使用具有最大大小的格式来缓冲,例如使用char buffer[10],您应该使用scanf("%9s", buffer);来读取最多9个字符。

gets()已过时,请勿使用它。它读取了一个完整的行,无论它的大小如何,因此如果具有管理员权限的程序使用这种蹩脚的功能,黑客可以使用它来渗透系统。这曾经是一个常见的黑客策略。请改用fgets(),它需要一个带缓冲区大小的参数。 fgets(buffer, 10, stdin);和我之前的例子一样。请注意,如果行不超过8个字符,\n将包含在缓冲区中。

getline()更具体,因为我知道它只是c++函数。

相关问题