c语言字符串输入scanf和gets

在 C 语言中,字符串是一种常见的数据类型,通常用于存储文本信息。在读取字符串时,常用的函数有 scanf()gets()

scanf() 函数可以用 %s 格式控制符来读取字符串,例如:

char str[100];
scanf("%s", str);

在这个例子中,%s 表示读取一个以空格、制表符或换行符为结束标志的字符串,将其存储到 str 数组中。需要注意的是,scanf() 函数可能会存在缓冲区溢出的风险,因此应该指定最大读取长度,并确保输入的字符串不超过数组的长度。

另外,需要注意的是,在使用 scanf() 读取字符串时,如果输入的字符串中包含空格、制表符等空白字符,则只会读取第一个非空白字符之前的部分,后面的内容会被留在输入缓冲区中,可能对后续的输入操作产生影响。

相比之下,gets() 函数则可以读取一整行字符串,包括其中的空白字符(但不包括结尾的换行符),例如:

char str[100];
gets(str);

在这个例子中,gets() 函数会读取一整行字符串,并将其存储到 str 数组中。需要注意的是,gets() 函数不存在缓冲区溢出的问题,但由于无法指定读取的最大长度,可能会导致输入的字符串太长而发生越界或者覆盖其他变量的情况。因此,建议在使用 gets() 函数时,使用 fgets() 函数代替,如下所示:

char str[100];
fgets(str, sizeof(str), stdin);

在这个例子中,fgets() 函数可以指定读取的最大长度,避免了缓冲区溢出的风险,并能够正确处理换行符和其他控制符,保证读取的数据完整。