我知道当函数的声明和定义不兼容时会发生此错误。我在这段代码中可以看到,函数(int getline)声明和定义的类型和参数是相同的。
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main() {
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while((len = getline(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s\n", longest);
}
return 0;
}
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;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while((to[i] = from[i]) != '\0'){
++i;
}
}
我知道我错过了一些小事。
答案 0 :(得分:1)
在POSIX系统中,如linux和macos getline
是标准和你的标准的一部分
getline
与之发生冲突。
将您的功能重命名为mygetline
。我复制了你的代码并重命名了这个函数,
它编译没有问题。
答案 1 :(得分:-1)
以下提议的代码:
但是,变量'max'永远不会初始化为任何已知值,因此它包含堆栈中其位置的垃圾。结果是1)代码不会始终工作,2)它包含未定义的行为。所以代码逻辑需要纠正
此外,当传入行超过1000个字节时,发布的代码无法处理条件。
现在,建议的代码
#include <stdio.h>
#define MAXLINE 1000
int my_getline(char line[], int maxline);
void copy(char to[], char from[]);
int main() {
int len;
int max;
char line[MAXLINE];
char longest[MAXLINE];
max = 0;
while((len = my_getline(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) {
printf("%s\n", longest);
}
return 0;
}
int my_getline(char s[], int lim)
{
int c, i;
for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = (char)c;
if (c == '\n') {
s[i] = (char)c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while((to[i] = from[i]) != '\0'){
++i;
}
}