如何在C语言中安全地读取用户输入(2)
如何在C语言中安全地读取用户输入
新的安全方法
更灵活的解决方案是,如果用户输入的数据比变量可能容纳的数据多,则允许字符串读取函数为字符串分配更多内存。
根据需要调整字符串变量大小,确保程序始终有足够的空间来存储用户输入。
getline函数正是这样。它从输入流读取输入,例如键盘或文件,然后将数据存储在字符串变量中。
但与fgets和gets不同,getline使用realloc调整字符串大小,确保有足够的内存来存储完整输入。
ssize_t getline(char **pstring, size_t *size, FILE *stream);
getline实际上是一个名为getdelim的类似函数的装饰器,它会读取数据一直到特殊分隔符停止。
本例中,getline使用换行符(\n)作为分隔符,因为当从键盘或文件读取用户输入时,数据行由换行符分隔。
结果证明这是一种更安全的方法读取任意数据,一次一行。
要使用 getline,首先定义一个字符串指针并将其设置为NULL,表示还没有预留内存,再定义一个size_t类型的“字符串大小” 的变量,并给它一个零值。
当你调用getline时,你需要传入字符串和字符串大小变量的指针,以及从何处读取数据。
对于示例程序,我们可以从标准输入中读取:
#include
使用 getline读取数据时,它将根据需要自动为字符串变量重新分配内存。
当函数读取一行的所有数据时,它通过指针更新字符串的大小,并返回读取的字符数,包括分隔符。
Enter a really long string:
Supercalifragilisticexpialidocious
getline returned 35
注意,字符串包含分隔符。对于 getline,分隔符是换行符,这就是为什么输出中有换行符的原因。
如果你不想在字符串值中使用分隔符,可以使用另一个函数将字符串中的分隔符更改为空字符。
通过 getline,程序员可以安全地避免 C 编程的一个常见陷阱:你永远无法知道用户可能会输入哪些数据。
这就是为什么使用gets不安全,而fgets又太笨拙的原因。
相反,getline提供了一种更灵活的方法,可以在不破坏系统的情况下将用户数据读入程序。
上述分享的如何在C语言中安全地读取用户输入的相关内容,供网友参考,希望能解决您的问题。
相关阅读
-
简单的网站设计模板 一个完整的网页设计流程
本文导读:简单的网站设计模板和一个完整的网页设计流程的电脑小知识,一起来看看吧! 随着个人创业的流行,很多个人也需要一个比较详细的网站来展示自己,开展个人业务,或者积累粉
-
python工具有哪些 新手python编程入门自学知识
为大家分享python工具有哪些和新手python编程入门自学知识的介绍,如有不对的地方欢迎指正! 随着python的火热,不少的程序员业余时间都会研究这门编程语言。 利用python开发,大牛用vim,接了
-
开网站需要多少钱 公司网页制作流程及费用
一篇很详细的教程是关于开网站需要多少钱和公司网页制作流程及费用的相关经验,接下来IT袋带大家一起了解。 这个问题可以说是网站建设常见问题最热门的问题,也是客户咨询的最多的问
-
哔哩哔哩是网站吗 哔哩哔哩是个什么网站
小编为你解答哔哩哔哩是个什么网站的IT小经验,哔哩哔哩是中国年轻世代高度聚集的文化社区和视频网站,简称B站,B站早期是一个ACG(动画、漫画、游戏)内容创作与分享的视频网站。


