这是我的代码:
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)
^
我不知道该程序在哪里有错误。你可以告诉我吗? 谢谢!
答案 0 :(得分:3)
您需要在头文件中或在my_getline.c
的内联中声明函数:
char *my_fgets(char *s,int maxlen,FILE *fp);
是声明。可以将其放在您的my_getline
函数之前或my_fgets.h
中(包括include保护),并在两个.c
文件中将该头文件#include在一起。
没有它,编译器将假定它看到的任何没有声明的函数都会返回int