在 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()
函数可以指定读取的最大长度,避免了缓冲区溢出的风险,并能够正确处理换行符和其他控制符,保证读取的数据完整。
评论