为什么我从其他函数引用一行来获取此编译器错误?

时间:2012-12-17 17:41:20

标签: c function

我只是试图将函数get_string中的copywords传递给main中的fileinput。

编译器在函数get_string中引用错误,同时引用第5行作为main的第一行。

#include <stdio.h>
#include <stdlib.h>

char get_string (char * copywords[100])
int main (){
char fileinput[100];
get_string(fileinput[100]);
;


char get_string (char * copywords[100]) {
FILE *fp;
int c;
char copywords[100];
fp = fopen("gues20.txt", "r");
if (fp == NULL)
exit(1);
else {
while(fgets(copywords , 100, fp) == EOF){
}
fclose(fp);
}
return (copywords);
}

3 个答案:

答案 0 :(得分:2)

get_string()之前的main()原型中缺少分号。

char get_string (char * copywords[100]);
                                       ^
                                       |
                                   IMPORTANT

这导致函数定义嵌套,这是不允许的。

答案 1 :(得分:1)

在声明get_string之后你没有分号,所以编译器不知道声明结束了,当它看到来自int的{​​{1}}时,它感到困惑,因为int main在函数声明的参数列表之后是​​不合法的。

PS:你的主要功能也没有右括号,但这是一个不同的问题。

答案 2 :(得分:0)

如果您使用的工具或编辑器为您缩进代码,您将会看到一些奇怪的东西。您错过了;,这就是原因。然后,您将;置于可能}的位置,因此存在不平衡{。不要低估它对你和任何读者有用的缩进和呈现代码的有用程度。

#include <stdio.h>
#include <stdlib.h>

char get_string (char * copywords[100]);

int main (){
    char fileinput[100];
    get_string(fileinput[100]);
}


char get_string (char * copywords[100]) {
    FILE *fp;
    int c;
    char copywords[100];  // redeclared
    fp = fopen("gues20.txt", "r");
    if (fp == NULL)
        exit(1);
    else {
        while(fgets(copywords , 100, fp) == EOF) ; // ??
        fclose(fp);
    }
    return copywords;  // (*)
}

您的代码显示其他错误,例如重新声明copywords,返回指针(指向无效的内存区域)而不是char。简而言之,您的代码将无法编译,即使您努力使其可编辑,也可能无法满足您的需求。