答案 0 :(得分:4)
scanf("%s", &buffer);
在输入中读取下一个标记(行/列表的任何空格/结尾将结束标记)并将其存储在char *buffer
中。您应该使用具有最大大小的格式来缓冲,例如使用char buffer[10]
,您应该使用scanf("%9s", buffer);
来读取最多9个字符。
gets()
已过时,请勿使用它。它读取了一个完整的行,无论它的大小如何,因此如果具有管理员权限的程序使用这种蹩脚的功能,黑客可以使用它来渗透系统。这曾经是一个常见的黑客策略。请改用fgets()
,它需要一个带缓冲区大小的参数。 fgets(buffer, 10, stdin);
和我之前的例子一样。请注意,如果行不超过8个字符,\n
将包含在缓冲区中。
getline()
更具体,因为我知道它只是c++
函数。