if((my_fgets(line,max,fp))== NULL)警告:指针与整数之间的比较[默认启用]

时间:2018-09-19 01:31:49

标签: c

这是我的代码:

my_fgets.c

#include<stdio.h>

char *my_fgets(char *s,int maxlen,FILE *fp)
{
    register int c;
    register char *cs;

    cs = s;
    while(--maxlen >0 && (c = getc(fp)) != EOF)
        if((*cs++ = c) == '\n')
            break;
    *cs = '\0';
    return (c == EOF && cs == s)? NULL: cs;
}

my_getline.c

#include<stdio.h>
#include<string.h>

/* getline : read a line, return lenght */ 
int my_getline(char *line, int max,FILE *fp)
{
    if ( (my_fgets(line, max, fp)) == NULL)
        return 0;
    else
        return strlen(line);
}

编译my_getline.c时,出现警告。

[root@server0 fgets]# gcc -c my_getline.c
my_getline.c: In function ‘my_getline’:
my_getline.c:7:36: warning: comparison between pointer and integer [enabled 
by default]
     if ( (my_fgets(line, max, fp)) == NULL)
                                    ^

我不知道该程序在哪里有错误。你可以告诉我吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

您需要在头文件中或在my_getline.c的内联中声明函数:

char *my_fgets(char *s,int maxlen,FILE *fp);

是声明。可以将其放在您的my_getline函数之前或my_fgets.h中(包括include保护),并在两个.c文件中将该头文件#include在一起。

没有它,编译器将假定它看到的任何没有声明的函数都会返回int