C 中自定义 getln 函数缺少原型错误消息的解释

Explanation of missing prototype error message for custom getln function in C

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


void main (void) {
SCON = 0x52;       // serial port configuration
TMOD = 0x20;       
TCON = 0x40;
TH1 = 0xf3;        // 2403 baudrate @12mhz

printf("Hello World");
printf("Please enter some text: ");
scanf(getLine());

}

const char *getLine()
{

    char *line = NULL, *tmp = NULL;
    size_t size = 0, index = 0;
    int ch = EOF;

    while (ch) {
        ch = getc(stdin);


        if (ch == EOF || ch == '\n')
            ch = 0;


        if (size <= index) {
            size += CHUNK;
            tmp = realloc(line, size);
            if (!tmp) {
                free(line);
                line = NULL;
                break;
            }
            line = tmp;
        }


        line[index++] = ch;
    }

    return line;
}
free(str);

这是我的代码。我认为我错误地调用了 getln。有没有办法让函数接受我可以从用户传入的输入?

此编译器是评估版,但我相信它包含我需要的库。

我的目标是接受一个 "string",或者更确切地说是一个字符数组,然后操纵它的顺序作为技能测试。我只有 2000 KB 的可用内存来写这个。

在指针和无法引用方面,我有点新手。非常感谢帮助甚至只是解释。

我正在使用 KEIL 编译器。

当我 select 程序 > 重建所有目标文件来检查我的错误时,我收到以下信息:

谢谢,

您需要添加:

const char *getLine(void); 

在顶部,在包含项下方。

这称为函数原型,它需要在使用函数之前出现在源文件中。

你基本上是提前告诉编译器 getLine 是一个不带参数的函数,returns const char *。因此,即使编译器还没有看到函数的 definition,当它出现在 main 函数中时,它仍然可以验证它是否被正确使用。

否则编译器在遇到第 14 行时不知道 getLine 是什么,并给出错误。

您已经在底部正确定义了函数,但是 C 编译器需要在顶部有一个名为 prototypes 的函数列表。原型必须包括函数类型、函数名称和函数采用的任何参数。例如:

#include <stdio.h>

void hello_world(); //This is the function prototype

int main()
{
    hello_world();
}

void hello_world()             //You did this part correctly, but C needs the 
{                             //prototype at the top in order to see this as a 
    printf("Hello, world!\n"); //defined function
}

在你的例子中,原型只是:

const char *getLine(void);

然后您的程序将 运行 没有任何 prototype 错误。 干杯!

或者,如果你想避免定义函数原型,在main之前定义getLine,比如

#include ...

const char * getLine() {
   ...
}

int main() {
    ...
}