我正在阅读Denis写的C程序书,我正在练习他的例子。我自己尝试了这个例子,然后从书中复制粘贴相同的例子。我得到了跟随错误。
代码:
#include <stdio.h>
#define MAXLINE 1000 /* maximum input line size */
int getline(char line[], int maxline);
void copy(char to[], char from[]);
/* print longest input line */
main()
{
int len; /* current line length */
int max; /* maximum length seen so far */
char line[MAXLINE]; /* current input line */
char longest[MAXLINE]; /* longest line saved here */
max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copy(longest, line);
}
if (max > 0) /* there was a line */
printf("%s", longest);
return 0;
}
/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
int c, i;
for (i=0; i<lim-1 && (c=getchar())!=EOF && c!=′\n′; ++i)
s[i] = c;
if (c == ′\n′) {
s[i] = c;
++i;
}
s[i] = ′\0′;
return i;
}
/* copy: copy ′from′ into ′to′; assume to is big enough */
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != ′\0′)
++i;
}
错误:
ex16.c:4:5: error: conflicting types for 'getline'
int getline(char line[], int maxline);
^
/usr/include/stdio.h:440:9: note: previous declaration is here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
^
ex16.c:8:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^~~~
ex16.c:16:40: error: too few arguments to function call, expected 3, have 2
while ((len = getline(line, MAXLINE)) > 0)
~~~~~~~ ^
/usr/include/stdio.h:440:1: note: 'getline' declared here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
^
ex16.c:27:5: error: conflicting types for 'getline'
int getline(char s[], int lim)
^
/usr/include/stdio.h:440:9: note: previous declaration is here
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) __OSX_AVAILABLE_...
^
1 warning and 3 errors generated.
我正在使用函数原型只是我猜。也提及其他互联网资源。我不确定它是否因为编译器。我正在使用Gcc 4.3版。 OS - mac maverics。
你能帮帮我吗?
感谢。
答案 0 :(得分:4)
只需在您声明,定义和使用它的地方调用您的函数getlineMy()
。
getline()
已在stdio.h (link) 中声明,其实现将链接到您的程序,因此除非您采用技巧,否则不能使用该名称。
答案 1 :(得分:3)
您必须设置GCC以将代码编译为C。
gcc -std=c99 -pedantic-errors -Wall
然后您将收到一个错误:
8:1:错误:返回类型默认为'int'
这是因为你对main()使用了错误的定义。将其更正为int main()
。
名称getline
可以正常使用,stdio.h和the compiler is not allowed to add functions中没有这样的函数是该标题内的非标准扩展,而没有用{{1}命名它们}前缀。