zoukankan      html  css  js  c++  java
  • fgets()函数

    声明:  char *fgets(char *str,int n,FILE* stream)

    参数:  str—这是指向一个字符数组的指针,该数组存储了要读取的字符串

         n – 这是要读取的最大字符数(包括最后的空字符)。通常是使用以str传递的数组长度

           stream –这是指向FILE对象的指针,该FILE对象标识了要从中读取字符的流。

    返回值:   如果成功,该函数返回相同的str参数,如果到达文件末尾或者没有读取到任何字符,str内容保持不变,并返回一个空指针,如果发送错误,返回一个空指针。

    #include<stdio.h>
    
    int main()
    {
        FILE* fp;
        char str[60];
    
        fp = fopen("file.txt","r");
        if(fp == NULL)
        {
            perror("open file error
    ");
            return -1;
        }
    
        while(fgets (str,60,fp) != NULL)
        {
            puts(str);
        }
        fclose(fp);
    
        return 0;
    }

    关于向stream传入stdin的情况

    /***
    stdin.c
    ***/
    #include<stdio.h>
    const int maxn = 100;
    
    int main()
    {
        int iRet = -1;
        FILE *fp;
        char str[100];
        char *ret_val;
    
        ret_val = fgets(str,maxn,stdin);
        //fgets(str,maxn,stdin);
        printf("ret_val = %8X
    ",(int)ret_val);
        printf("str = %s
    ",str);
        printf("str = %8X
    ",(int)str);
    
        if(str != NULL)
        {
            fp = fopen("file.txt","a+");    
            iRet = fputs(str,fp);
            if(iRet > 0)
            {
                printf("success
    ");
            }
            else
            {
                printf("error
    ");
            }
        }
        
        return 0;
    }

    ret_val = fgets(str,maxn,stdin);

    str不能仅仅单独声明为char*类型。虽然这样声明也可以通过,但是它会存在风险,如果该指针随机指向了一个正在使用的空间。

    所以在声明的时候分配内存是最好的选择

    ret_val他会指向和str相同的内存空间,如果str声明为char*类型,会导致返回值的ret_val

    指向地址失败,程序出现段错误。

  • 相关阅读:
    DataTable进行排序Asc升序,Desc降序
    Money型字段小数点后保留两位小数
    删除RHSA文件方法
    PowerDesigner 同名问题解决 Entity Attribute name uniqueness
    Repeater嵌套绑定Repeater以及内层调用外层数据
    让A超链接无效的办法 阻止元素发生默认的行为
    图的遍历
    Modular Production Line
    网络流24题-最长k可重区间集问题
    运输计划
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11608141.html
Copyright © 2011-2022 走看看