gpt4 book ai didi

c - 尽管导入了 stdio,但 getline 未在此范围内声明

转载 作者:行者123 更新时间:2023-12-04 04:32:34 33 4
gpt4 key购买 nike

我需要使用 getline()在 C 中,但是当我写:

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

int main(int argc, char** argv) {

char *line;
getline(&line, NULL, stdin);
free(line);

return (0);
}

编译器写入 error: getline was not declared in this scope我能做些什么? getline 不是在 stdio.h 中声明的吗? ?我以前从来没有遇到过这种问题。

我使用 GCC GNU 编译器。

最佳答案

您需要定义 _GNU_SOURCE要使用此函数,请在包含 stdio.h 之前定义它或将其作为 -D_GNU_SOURCE 传递给编译器因为这是一个 GNU 扩展函数。

另一个可能的原因是您的 GLIBC 没有此功能,因此请尝试:

  • /usr/include/stdio.h 中寻找它
  • 测试 _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700就像手册页说的(包括 features.h 之后)

  • 以下实现 可能工作(未经测试):
    #define INTIAIL_SIZE 100
    size_t getline(char **lineptr, size_t *n, FILE *stream)
    {
    char c;
    size_t read = 0;
    char *tmp;

    if (!*lineptr) {
    if (!n)
    *n = INTIAIL_SIZE;

    tmp = malloc(*n);
    *lineptr = tmp;
    } else
    tmp = *lineptr;

    while ((c = fgetc(stream)) != '\n') {
    *tmp++ = c;

    if (++read >= *n) {
    char *r = realloc(tmp, *n * 2);
    if (!r) {
    errno = ENOMEM;
    return -1;
    } else
    tmp = r;
    }
    }

    *n = read;
    return read;
    }

    您当前遇到的错误:
  • 你没有释放 line使用后
  • 你没有通过line作为引用,因为函数原型(prototype)是:ssize_t getline(char **lineptr, size_t *n, FILE *stream);因此char **lineptr
  • 关于c - 尽管导入了 stdio,但 getline 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335695/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com