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

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

  • 相关阅读:
    Ubuntu无法初始化软件包信息
    数组名做函数的参数
    Printf函数中%p代表什么数据类型
    assert()函数用法总结
    C语言printf 格式 zz
    零值指针指向何处? zz~
    命名空间“System.Net”中不存在类型或命名空间名称“Sockets”。是否缺少程序集引用?
    AD20配置为中文显示
    sharepoint:实现搜索功能
    sharepoint:爬网完成后上传新文档搜索不到(设定爬网Schedule)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11608141.html
Copyright © 2011-2022 走看看