为什么gets()假设extern在C中的代码中返回int?

Mor*_*ta1 1 c gets

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

int main() {
    int length;
    char **lines, buffer[80];

    printf("How many lines do you want to enter?.\n");
    scanf("%d", &length);
    getchar();
    lines = (char**)malloc(length * sizeof(char*));
    for (i = 0; i < length; ++i) { //Scan user's lines
        gets(buffer);
        lines[i] = (char*)malloc(strlen(buffer) * sizeof(char) + 1);
        if (!lines[i]) { //Check if allocation available
            printf("Error! Out of memory!");
            return endProgram;
        }
        strcpy(lines[i], buffer);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么gets()函数给我一个关于假设extern返回int的错误,我只是想扫描一个字符串.

das*_*ght 8

最可能的原因是gets()函数已被弃用了一段时间.看起来它已从<stdio.h>您的系统中删除.

幸运的是,这种情况很容易解决:用这样的方式替换呼叫fgets():

fgets(buffer, sizeof(buffer), stdin);
Run Code Online (Sandbox Code Playgroud)

注: fgets不是下降的替代产品gets,因为它使'\n'字符在行它返回的字符串内结束.本问答讨论了该问题,并提供了解决方案.

  • 这个答案太短了,`fgets`不是替换`gets`的下降,必须删除最终的''\n'以获得类似的语义. (2认同)