发布于 2016-04-08 06:29:12
scanf("%s", &buffer);读取输入中的下一个令牌(任何空格/行尾/制表将结束令牌),并将其存储在char *buffer中。您应该使用最大大小的格式来缓冲,例如,对于char buffer[10],您应该使用scanf("%9s", buffer);最多读取9个字符。
gets()已经过时了,不要使用它。它读取了整行,不管它的大小,所以如果一个具有管理特权的程序使用这样一个糟糕的功能,它可以被黑客用来穿透系统。这曾经是一种常见的黑客策略。请使用fgets(),它使用一个与缓冲区大小相同的参数。在前面的示例中使用fgets(buffer, 10, stdin);。请注意,如果行不超过8个字符,\n将包括在缓冲区中。
getline()更具体,因为我知道它只是一个c++函数。
https://stackoverflow.com/questions/36492852
复制相似问题