getline 函数无法使用 mingw-w64 gcc 进行编译

问题描述 投票:0回答:1

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

我尝试了各种选项,例如

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

以上都没有编译该文件。错误总是相似的。 有什么方法可以编译这个吗? 看起来 getline 不是 c 标准的一部分。但有些编译器确实支持它。

有什么建议吗?

c++ c gcc getline c-standard-library
1个回答
2
投票

事实上,

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

要使其在 Windows 下工作,您需要使用 Cygwin 在 Windows 下模拟 Unix。 gcc/mingw 端口不行,因为它使用 Microsoft 的 C 标准库。

好消息是,无论如何你可能都不想使用

getline
(即使在 POSIX 中),因为该函数有一个可怕的 API,并且是有缺陷的 C 程序中内存泄漏的主要来源。这是那些奇怪的、古老的 Unix 函数之一,应该避免。相反,请考虑将
fgets
与调用者分配的缓冲区一起使用:更快、更安全、可移植的标准 C。

© www.soinside.com 2019 - 2024. All rights reserved.