【问题标题】:conflicting types for the sample from The C Programming Language 1.9来自 C 编程语言 1.9 的示例的冲突类型
【发布时间】:2017-02-19 19:02:00
【问题描述】:

我是 C 新手,我正在使用 C 编程语言,我复制了 1.9,它试图打印最长的行。当我尝试在 Xcode 中构建程序时,它显示存在类型冲突的错误和表达式问题,我尝试将函数“getline”放在 main 之前,但我仍然不知道出了什么问题。

#include <stdio.h>
#define MAXLINE 1000 /* maximum input line size */
int getline(char line[ ], int marline);     ----ISSUE:Conflicting types for "getline"
void copy(char to[ ], char from[ ]);

/* print longest input line*/
int 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)     ------ISSUE:Expected Expression
    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){            ----ISSUE:Conflicting types for "getline"    
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;}

【问题讨论】:

  • 请正确格式化您的代码。
  • getline 是保留功能。重命名该函数,例如:my_getline
  • while ((len=getline(line[ ], MAXLINE))&gt;0) -> while ((len=getline(line, MAXLINE))&gt;0)。其余的,请参阅下面的答案。
  • int main(){ 往往不受欢迎。请改用int main ( void )int main(int argc, char **argv)

标签: c


【解决方案1】:

它与标准库的 getline() 函数相冲突,该函数在编写该书时不存在(它来自 POSIX.1-2008,这本书......更旧)。

重命名示例中的函数,以避免冲突。只需改用mygetline() 就可以了。

【讨论】:

    【解决方案2】:

    在 ISO C 中,您的程序是可以的,但是您使用的编译器默认为 POSIX C 或其他东西。

    如果您使用的编译器支持符合 ISO 标准的模式,请通过编译器开关调用该模式。对于 gcc,它是 -std=c11-std=c99

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多