gets()
函数允许输入带空格的字符串,因为它会读取整行输入,直到遇到换行符为止,并将整行的内容存储到指定的缓冲区中,包括其中的空格。但是,gets()
存在一个很大的安全性问题,因为它不检查输入字符串的长度,可能导致缓冲区溢出。
char buffer[100];
gets(buffer); // 允许输入带空格的字符串
相比之下,scanf()
函数默认使用空格作为输入项之间的分隔符。因此,如果使用%s
格式说明符来读取字符串,它将在遇到空格、制表符或换行符时停止读取。这意味着默认情况下,scanf()
会在遇到空格时停止读取字符串。
char str[100];
scanf("%s", str); // 不允许输入带空格的字符串,只读取空格前的部分
如果想输入带空格的字符串,可以使用 %[\n]
格式说明符,它告诉 scanf()
读取直到遇到换行符为止的所有字符:
char str[100];
scanf("%[^\n]", str); // 允许输入带空格的字符串,直到换行符为止
注意:即使使用 %[^\n]
也需要小心处理缓冲区溢出问题。最好的做法是使用安全的输入函数,如 fgets()
。