区别btw gets,scanf('%s'),getline

Gau*_*ora -2 c c++ std

我在quora上阅读了这个问题,并读到Google在其一次采访中问了这个问题,

函数之间有什么区别:scanf(“%s”),gets和getline

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

jda*_*nay 5

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

gets()已过时,请勿使用。它会读取一个完整的行,而不管它的大小如何,因此,如果具有管理员特权的程序使用了如此卑鄙的功能,则黑客可以利用它入侵系统。这曾经是普通黑客的策略。请fgets()改用,它使用一个与缓冲区大小相同的参数。fgets(buffer, 10, stdin);与我之前的示例。请注意,\n如果该行不超过8个字符,它将包含在缓冲区中。

getline()更具体,因为我所知道的c++只是一个功能。

  • [`getline`在C语言中可用](http://man7.org/linux/man-pages/man3/getline.3.html),尽管它不是标准C语言。它是POSIX.1-2008函数 (4认同)