C11中gets()的函数被删除

您所在的位置:网站首页 gets函数puts函数 C11中gets()的函数被删除

C11中gets()的函数被删除

2023-10-05 19:55| 来源: 网络整理| 查看: 265

C11中替代gets()的函数

1、gets()函数及其存在的问题 在读取字符串时,scanf()和%s只能读取一个单词,即遇到 ’ ’ (空格)就会停止读取。在程序中经常需要读取一行字符串,而不是一个单词。在C11标准前,gets()函数就可以处理这种情况,读取整行输入,直到遇到换行符,就丢弃换行符,读入剩下的字符。 例如: #include int main(){ char words[100]; gets(words); puts(words);

return 0;

} INPUT

Hello World! OUTPUT

Hello World! 但是,这里有一个严重的问题,gets()函数只有一个参数(words),gets函数只知道数组的开始地址,而不知道何时结束,因此当输入的字符串过长,就会导致缓冲区溢出问题。

2、gets()函数的替代品 1、fgets() fgets(words,STLEN,stdin)

1、fgets()函数的第二参数指明了读入字符串的最长量,如果该参数为n,那么最多将会读入n-1个字符,或者读到换行符为止。

2、与gets()不同的是,fgets()会将读到的换行符存储在数组中,而gets()会丢弃换行符。

3、fgets()的第三个参数必须声明要读入的文件,如果从键盘读入,则声明为stdin作为参数,该标识符的定义在sdtio中。

如果我们不需要将换行符存储在数组中,那么可以将其处理掉:

int i=0; while(words[i] != ‘\n’) i++; words[i]=’\0’; 2、gets_s() gets_s(words,STLEN)

1、gets_s()函数只从标准输入中读数据,因此它不需要第三个参数。

2、gets_s()也会丢弃换行符

如果读入的字符串没有超出存储长度,那么gets_s()和gets()是非常相似的,一旦超出了存储长度,gets()函数就会不安全,因为它会修改超出部分的内存,擦写现存的数据,而gets_s是安全的,一旦超出,就会自动调用“处理函数”,中止或退出程序。 转载于



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3