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

时间:2019-04-26 05:37:28

标签: c getline

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

#include <stdio.h>

int getline(char line[]);

int main()
{
   char line[100];
   int len;
   while ((len = getline(line)) > 0)
       printf("%d\n", len);
}

int getline(char line[])
{
   int i, c;
   for (i = 0; (c = getchar())!=EOF && c!='\n'; ++i)
        line[i] = c;
   if (c == '\n'){
        line[i] = c;
        ++i;
   }
   line[i] = '\0';
   return(i);
}

3 个答案:

答案 0 :(得分:4)

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

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

与您的声明/定义冲突。

使用其他函数名称(例如my_getline()或类似名称)。

答案 1 :(得分:2)

您的代码可以使用兼容的编译器进行编译。

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

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

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

答案 2 :(得分:0)

您可以将getline函数名称更改为fetchline,一切都会按预期进行。向隆丁致以诚挚的谢意。