C程序-错误:类型与‘;字符行[]和#x2019;[-fpermissive]\

C程序-错误:类型与‘;字符行[]和#x2019;[-fpermissive]\,c,gcc,C,Gcc,我不熟悉c语言。因此,我从Brian Kernighan和Dennis Ritchie的书(C编程语言)中复制了代码。我在复制pg32示例。当我遇到这个错误时: pg32.c: In function ‘int main()’: pg32.c:16:23: error: type mismatch with previous external decl of ‘char longest []’ [-fpermissive] pg32.c:7:6: error: previous external

我不熟悉c语言。因此,我从Brian Kernighan和Dennis Ritchie的书(C编程语言)中复制了代码。我在复制pg32示例。当我遇到这个错误时:

pg32.c: In function ‘int main()’:
pg32.c:16:23: error: type mismatch with previous external decl of ‘char longest []’ [-fpermissive]
pg32.c:7:6: error: previous external decl of ‘char longest [1000]’ [-fpermissive]
pg32.c: In function ‘int getl()’:
pg32.c:33:20: error: type mismatch with previous external decl of ‘char line []’ [-fpermissive]
pg32.c:6:6: error: previous external decl of ‘char line [1000]’ [-fpermissive]
pg32.c: In function ‘void copy()’:
pg32.c:50:20: error: type mismatch with previous external decl of ‘char line []’ [-fpermissive]
pg32.c:6:6: error: previous external decl of ‘char line [1000]’ [-fpermissive]
pg32.c:50:31: error: type mismatch with previous external decl of ‘char longest []’ [-fpermissive]
pg32.c:7:6: error: previous external decl of ‘char longest [1000]’ [-fpermissive]
我再次键入代码4次,同样的错误。我不确定,但我认为这是一个遗留问题

#include<stdio.h>

#define MAXLINE 1000

int max;
char line[MAXLINE];
char longest[MAXLINE];

int getl(void);
void copy(void);

int main()
{
  int len;
  extern  int max;
  extern char longest[];

  max =0;
  while((len =getl()) > 0)
    if(len > max){
      max = len;
    copy();
    }

  if(max > 0)
    printf("%s", longest);
  return 0;
}

int getl(void)
{
  int c, i;
  extern char line[];

  for(i =0; i < MAXLINE-1 &&
    (c=getchar()) != EOF && c != '\n'; ++i)
    line[i] =c;

  if(c=='\n'){
    line[i] = c;
    ++i;
  }
  line[i] ='\0';
  return i;
}

void copy(void)
{
  int i;
  extern char line[], longest[];

  i=0;
  while((longest[i] = line[i]) != '\0')
    ++i;
}
#包括
#定义MAXLINE 1000
int max;
字符行[MAXLINE];
字符最长[MAXLINE];
int getl(无效);
作废副本(作废);
int main()
{
内伦;
外部输入最大值;
外部字符最长[];
max=0;
而((len=getl())>0)
如果(长度>最大值){
max=len;
复制();
}
如果(最大值>0)
printf(“%s”,最长);
返回0;
}
int getl(无效)
{
int c,i;
外部字符行[];
对于(i=0;i
非常感谢您的帮助。

您在文件顶部将“line”和“longest”声明为全局变量,作为固定长度数组。然后将它们重新声明为extern(顺便说一句,不需要这样做),作为长度不确定的数组。编译器不喜欢这样,所以有两种解决方案:

  • 将每个
    extern行[]
    更改为
    extern行[MAXLINES]
    并将每个
    extern字符最长[]
    更改为
    extern字符最长[MAXLINES]
  • 删除所有
    extern
    声明,只需使用顶部的globals

  • 你在用什么编译器?这与gcc-4.3.4gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu4)都应该可以工作。如果它在像这样的同一个文件中(实际声明和外部声明),我认为选项二实际上更可取。但是谢谢你的选择1。