如何解决c语言中的冲突类型错误?

如何解决c语言中的冲突类型错误?,c,getline,C,Getline,我在函数getline中遇到冲突类型的错误。我在两个函数声明语句中的变量和函数类型是一致的,所以我不知道问题出在哪里 #包括 int getline(字符行[]); int main() { 字符行[100]; 内伦; 而((len=getline(line))>0) printf(“%d\n”,len); } int getline(字符行[]) { int i,c; 对于(i=0;(c=getchar())!=EOF&&c!='\n';++i) 第[i]=c行; 如果(c=='\n'){ 第

我在函数getline中遇到冲突类型的错误。我在两个函数声明语句中的变量和函数类型是一致的,所以我不知道问题出在哪里

#包括
int getline(字符行[]);
int main()
{
字符行[100];
内伦;
而((len=getline(line))>0)
printf(“%d\n”,len);
}
int getline(字符行[])
{
int i,c;
对于(i=0;(c=getchar())!=EOF&&c!='\n';++i)
第[i]=c行;
如果(c=='\n'){
第[i]=c行;
++一,;
}
第[i]行=“\0”;
回报(i);
}

您的编译器似乎已配置为使用POSIX标准,并且在POSIX环境中,已在
stdio.h
中作为原型

ssize_t getline(char **lineptr, size_t *n, FILE *stream);
与您的声明/定义冲突


使用不同的函数名(例如:
my_getline()
或类似名称)。

您的代码使用符合标准的编译器编译得很好

问题是您的编译器被设置为非一致性编译器(它遵循POSIX而不是C)。因此,POSIX在stdio.h中放置的非标准函数
getline
之间会出现名称空间冲突

使用gcc之类的编译器,您可以通过使用
gcc-std=c11
编译来阻止非标准扩展出现在标准头中。默认情况下,gcc运行
-std=gnu11
,它遵循POSIX,但不遵循C标准


如果您是学习C的初学者,请始终使用
gcc-std=c11-pedantic errors-Wall-Wextra

编译,您可以将getline函数名更改为fetchline,一切都将按预期进行。感谢Lundin的透彻解释。

已经是一个标准的库函数。为什么必须使用相同的名称?
如何解决c中的冲突类型错误?
更改类型名称。编译器是否告诉您该函数最初是在哪里用不同的类型声明的?如果这不是您自己的声明,那么这是一个很好的提示,说明您正在使用现有标识符,应该更改名称。@SouravGhosh
getline
是一个非标准的库函数。@Lundin是的,我已经将其添加到了我的答案中。我不知道“getline”在POSIX中已经是一个函数了。我改了名字,一切都搞定了。非常感谢你!我将从现在开始添加这些选项,因为我是C的新手!谢谢你的详细解释!