开发者社区 问答 正文

关于标准输入输出的一个小程序,请大虾们看看,究竟出现了什么问题,谢谢啊

/*头文件省略*/
static FILE *f(void);
static char *h(char *,FILE *);
static char b[MAXLINE];
int main()
{
char p[MAXLINE];
FILE *o;
o=f();
h(p,o);
printf("%s",p);
exit(0);
}
static char *h(char *c,FILE *l)
{
while(fgets(c,sizeof(c),l)!=NULL);
}
static FILE *f(void)
{
FILE * fp;
if((fp=fopen("new.file","r+"))==NULL)
err_sys("error");
if(setvbuf(fp,b,_IOFBF,MAXLINE)!=0)
err_sys("set error");
return (fp);
}
"new.file"文件为工作目录下的一个文件,程序执行时,为什么"new.file"的内容无法输出?是程序栈的问题吗,请大虾指教。

展开
收起
a123456678 2016-03-19 11:52:44 1763 分享 版权
1 条回答
写回答
取消 提交回答
  • 函数调用后所有的结果在函数运行完都会释放掉的,你那个
    static char *h(char *c,FILE *l)
    {
    while(fgets(c,sizeof(c),l)!=NULL);
    }
    函数都没有返回值。肯定不对。
    这样行啦。
    static FILE *f(void);
    static char *h(char *,FILE *);
    static char b[MAXLINE];
    int main()
    {
    char p[MAXLINE];
    FILE *o;
    o=f();
    h(p,o);
    exit(0);
    }
    static char *h(char *c,FILE *l)
    {
    while(fgets(c,sizeof(c),l)!=NULL)
    printf("%s",c);
    return NULL;
    }
    static FILE *f(void)
    {
    FILE * fp;
    if((fp = fopen("c:\wexam\out.dat","r+") )==NULL)
    perror("error");
    if(setvbuf(fp,b,_IOFBF,MAXLINE)!=0)
    perror("set error");
    return (fp);
    }
    2019-07-17 19:07:57
    赞同 展开评论
问答地址: