getline 函数不使用 mingw-w64 gcc 编译

getline function not compiling with mingw-w64 gcc

我有一个 program2.c c 代码。 gcc program2.c 给出以下错误 -

我尝试了各种选项,例如

  1. gcc -std=gnu90 program2.c
  2. gcc -std=c90 program2.c
  3. gcc -std=c99 program2.c
  4. gcc -std=c11 program2.c
  5. gcc -std=gnu11 program2.c
  6. g++ program2.c

None上面的编译文件。错误总是相似的。 有没有办法编译这个? 看起来 getline 不是 c 标准的一部分。但是一些编译器确实支持它。

有什么建议吗?

的确,getline 从来都不是 C 标准库的一部分,而是 Unix/POSIX 的扩展。要访问它,您需要在 Unix 下以 POSIX(“gnu”)模式使用 gcc 进行编译,在这种情况下,编译器会将函数丢弃在 stdio.h 中。在标准 headers 中删除 non-standard 函数是 non-compliant 行为。

要在 Windows 下运行此功能,您需要使用 Cygwin 在 Windows 下模拟 Unix。 gcc/mingw 端口不行,因为那个端口使用 Microsoft 的 C 标准库。

好消息是你可能不想使用 getline 无论如何(即使在 POSIX 中),因为那个函数有一个可怕的 API 并且是一个主要来源针对有问题的 C 程序中的内存泄漏。这是应该避免的那些奇怪的、古老的 Unix 函数之一。相反,请考虑将 fgets 与 caller-allocated 缓冲区一起使用:更快、更安全、可移植的标准 C.