char *s_gets(char *st, int n) { char *ret_val; int i = 0; ret_val = fgets(st, n, stdin); if (ret_val)//当ret_val等于空字符时,ret_val值为0,测试条件为假,循环结束 { while (st[i]!='\n'&&st[i]!='\0') { i++; } if (st[i] == '\n') st[i] == '\0';//...
s_gets这玩意儿是本书作者自创的函数 具体源码在P335/P336
1. fgets() 2. get_s() 3. s_gets() 一. fgets() 1. fgets()通过第2个参数来限制读入的字符数来解决溢出问题。 2. 函数专门用于处理文件输入,一般情况下不是很好用。 1. 2. 3. 4. 5. 6. 解释: fgets()函数的第2个参数指明了读入字符的最大数量。如果参数是n,那么fgets()函数将读入n-1个...
gets_s接受三个参数:第一个参数是存储输入字符串的缓冲区指针,第二个参数是缓冲区的大小,第三个参数是流指针。如果读取成功,gets_s函数将返回输入字符串的指针,否则将返回空指针。使用gets_s函数可以有效地避免缓冲区溢出和其他安全问题,从而提高程序的安全性。
C语言中的函数可以返回一个值,也可以不返回值。返回的值可以赋给变量,也可以不处理,就和你给的例子中一样,只是返回值抛弃了而已,不影响函数的执行。
首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题 个人猜测:由于这些C函数存在这些问题,所以VS编译器直接屏蔽了这些函数,然后用了一套加上后缀_s的函数来实现相同的功能,为了解决之前函数的越界的问题,_s系列的函数又分别增加了一些形参,比如长度等,所以,即使我们在C语言函数的基础上加上_...
在输入一个数据时,一般都会按回车来确认输入结束,可是scanf()函数对最后的回车确认符并不丢弃,而是存储在** 缓存 ** 中,这样如果,下一个操作是读字符操作,则会将缓存中的回车符误读为实际数据,而造成程序运行异常。因此,在确认输入一个数据后,要回车来确认时,可通过while (getchar()!=’\n’) ;来清除缓存...
fgets函数,数获取的字符串与gets函数获取的不一样,fgets函数获取的字符串会在buffer里面保留换行符,而gets函数不会;也就是说最后一个是换行符 gets_s函数,可以像gets一样不会获取换行符,也不会有gets的越界问题。所以gets_s函数是一个标准库扩展函数,一个可选项;所以就不知道这个gets_s函数在各个编译器下的支持...
gets()常用来输入字符串,遇到空格与TAB键不会结束,遇到ENTER键结束,gets()函数读取ENTER键但不保存,用’\0’取代’\n’。 #include<stdio.h> int main() { char a[10],b; gets(a); printf("%s", a); b = getchar(); printf("%c", b); ...
scanf()函数和gets()函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和 Tab键 都会认为输入结束,所有它不能接收空格。char string[15];gets(string);/*遇到回车认为输入结束*/ scanf("%s",string)...