zoukankan      html  css  js  c++  java
  • 使用gets函数常见问题

    C语言面试经常会考如下一道题,哪里有错误:

    #include <stdio.h> 
     
    int main() 
    {
        char string[100] = {''}; 
        gets(string); 
     
        printf("输入的字符串是:%s ", string); 
     
        return 0; 
    这段C程序可能有问题,问题就在于函数gets()的使用。
    gets从标准输入设备读字符串函数,可以无限读取,不会判断上限,以回车结束读取。所以如果输入的字符串超过100个,它也不会做检测,此时就会发生溢出。

    可以使用fgets函数来从文件中读取字符串。fgtes函数原型是
    char *fgets(char *buf, int bufsize, FILE *stream);
    一般的教材都会对这个函数的用法作出解释,这里就不在详述了,以下文字摘用百度百科的解释:
    百度百科对fgets函数的解释
    从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋''),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
  • 相关阅读:
    软件工程第八周总结
    一维最大子数组的和续
    程序员修炼之道阅读笔记02
    软件工程第七周总结
    团队软件的NABCD—校园知网
    程序员修炼之道阅读笔记01
    软件项目管理阅读笔记01
    个人作业4 结对开发地铁
    学习进度五
    学习进度四
  • 原文地址:https://www.cnblogs.com/itblog/p/7236572.html
Copyright © 2011-2022 走看看