【发布时间】:2014-05-27 06:07:23
【问题描述】:
我正在阅读 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 版。操作系统 - mac 小牛。
你能帮帮我吗?
谢谢。
【问题讨论】:
-
是的,它已经在那里了吗?函数原型是预先声明我们将使用哪些函数。你能用一个例子分享吗?请。
-
你的意思是“getline”已经在 stdio.h 中声明了?嗯,让我尝试重命名它。
-
谢谢。我从来不知道 getline 已经在 stdio.h 中声明了。多谢。它解决了问题。
-
@Bala 不,stdio.h 中没有这样的功能。看我的回答。
-
@Bala 将
-std=c89用于本书中的程序。
标签: c