K&R 第 2 版,示例 1.9 字符数组

2023-12-26

我对以下代码中的 getline() 函数和参数定义有疑问。代码直接取自 K&R 第 1.9 章:“字符数组”。我已将其逐字复制在这里。问题是,当我按原样编译程序时,出现三个错误(我在最后重现了这些错误)。当我在出现错误的三个地方将函数和函数参数定义更改为 get_line() (带有下划线而不只是 getline)时,错误停止并且程序按预期运行。

我的问题是:

C 中发生了什么变化,导致 getline() 无效,但 get_line() 是函数定义的有效名称?

#include <stdio.h>
#define MAXLINE 1000    // maximum input line size

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* print longest input line */

int main()
{
    int len;            //current line lenght
    int max;            //maximum length seen so far
    char line[MAXLINE]; //current input line
    char longest[MAXLINE];//longest line saved here

    max = 0;
    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
            max = len;
            copy(longest, line);
        }
        if (max > 0)   //there was a line
            printf("%s", longest);
            return 0;
}

/*  getline: read a line into s, return length */
int getline(char s[], int lim)
{
    int c, i;

    for (i = 0; i<lim-1 && (c=getchar()) != EOF && c !='\n'; ++i) 
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
        s[i] = '\0';
        return i;
}


/* copy: copy 'from' into 'to'; assume to is big enough */
void copy(char to[],char from[])
{
    int i;

    i = 0;
    while ((to[i] = from[i]) != '\0') {
        ++i;
    }
}

我得到的错误是:

  • ./section 1.9.1.c:4:5:错误:“getline”的类型冲突;int getline(int line[], int maxline);

  • ./section 1.9.1.c:17:40:错误:函数调用的参数太少,预期为 3,有 2while ((len = getline(line, MAXLINE)) > 0); and

  • ./section 1.9.1.c:30:5:错误:“getline”的类型冲突int getline(int s[], int lim)


stdio 库分布于glibc声明一个函数,也称为getline与您的签名不同。由于不能声明两个具有相同名称的函数,因此编译器会给出错误。相互矛盾的声明getline在stdio.h中找到的是:

   ssize_t getline(char **lineptr, size_t *n, FILE *stream);

The getline函数最初是 glibc 的扩展,后来被包含在 POSIX.1-2008 中。它不是标准 C 函数。

如果您正在使用gcc您可以通过使用获得符合标准的行为-std命令行开关。除此之外,这隐藏了非标准函数的声明。尝试例如:

gcc -Wall -pedantic -std=c11 "section 1.9.1.c" -o "section 1.9.1"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K&R 第 2 版,示例 1.9 字符数组 的相关文章

  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 如果多个键是相同的 JS,则对对象中的值求和

    例如我有 5 个对象 row aa col 1 value 1 row bb col 2 value 1 row bb col 3 value 1 row aa col 1 value 1 row aa col 2 value 1 我想对值
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • Visual Studio Code 调试默认 ASP.NET Core MVC WebApp:不起作用

    我正在使用 Manjaro linux 并尝试调试默认的 ASP NET Core MVC 项目 但调试停止 没有任何错误 我创建了该项目 dotnet new mvc in a Meow文件夹 没什么特别的 然后添加了新的配置 NET C
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • 从 STL 列表中删除项目

    我想创建一个函数 如果符合特定条件 则将项目从一个 STL 列表移动到另一个列表 这段代码不是这样做的方法 迭代器很可能会被擦除 函数失效并导致问题 for std list
  • C# amo 获取角色完整

    我正在开发一个 SSAS 项目 其中除其他事项外 我需要获取 C 中表格多维数据集的完整用户列表 目前我让它以这样的方式工作 我可以获得角色 但数据不完整 当我调用 Server Database Roles 为了便于阅读而简化 属性并枚举

随机推荐

  • 如何创建我自己的 Android 库并托管它

    我正在努力创建一个登录屏幕 以便与多个不同的 Android 应用程序一起使用 打包它的最佳方式是什么 以便其他人可以在他们的应用程序上使用我的登录功能 最好是在我们进行更改时自动同步它们 编辑 看来将其打包到库模块中是最好的选择 如何上传
  • 如何在iPhone上创建全屏模态状态显示?

    我正在尝试为 iPhone 应用程序创建模式状态指示器显示 并且希望使用与 Tweetie 中使用的类似的指示器 具体来说 这个 遮蔽 整个屏幕 包括工具栏 我不相信通过任何正常的 UIView 操作 我可以超出窗口的边界 可以吗 我相信我
  • 在预制件中存储对场景对象的引用?

    看 我的场景中有一个玩家和一个敌人 我正在使用 vector2 movetowards 将敌人移向我的玩家 但我的敌人是一个预制件 所以我必须在检查器中给它一个我的玩家的引用作为目标 但是当我从场景中删除敌人时 因为它是一个预制件 它会删除
  • 当表单经过身份验证的用户未经身份验证时捕获的事件

    我基本上正在寻找与 FormsAuthentication OnAuthenticate 相反的事件 我想在用户注销时从数据库中删除一些值 我尝试将其放入 Session End 事件中 但在执行此事件时用户似乎已经离开了 更新 如果我无法
  • 如何返回作为参数给出的相同集合类型,但具有不同的元素类型?

    我想做这个 public
  • 为什么像 Ruby 和 Python 这样的动态语言不像 Java 或 C# 那样有接口的概念?

    令我惊讶的是 我对 Ruby 和 Python 等动态语言越来越感兴趣 他们声称它们是 100 面向对象的 但正如我所读到的 接口 方法重载 运算符重载等几个基本概念都缺失了 它是否以某种方式内置在幕后 或者这些语言只是不需要它 如果后者是
  • Python 电子邮件负载解码

    我知道这个问题已经被问了上千次了 但我已经快要崩溃了 所以我忍不住去寻求帮助 我有一封带有法国口音的电子邮件 这句话是 席琳 柏林安妮特 0633 python的email包变化 在 3A 上 E9 上的 如何恢复口音 和 符号 我通过网络
  • 奇异值分解实现

    我有一个用 C 实现的 SVD 库 但我想在 Java 程序中调用它的函数 有没有简单的方法可以做到这一点 或者有人建议一个 Java 中 SVD 实现的链接 还有 Apache commons Math 库 http commons ap
  • Android 深度链接架构:同时匹配 http 和 https

    我希望我的应用程序能够打开http www example com and https www example com 这有效
  • 音频单元图暂停和重复

    我一直在尝试使用 Apple 提供的代码来实现音频单元图 IphoneMixerEQGraph测试 http developer apple com library ios samplecode iPhoneMixerEQGraphTest
  • Typescript 与“typeof”相反/反向操作

    Angular 可以按类型查询子组件 在测试中使用它 如下所示 fixture debugElement query By directive ComponentType 现在我想创建一个为我执行此操作的函数 import Componen
  • 从其他类 Objective-C 访问方法

    寻找这个问题的答案 但我还没有找到合适的答案 我希望你们 和女孩 能帮助我 这是针对 iPhone 应用程序的 好吧 我有一个多视图应用程序 每个视图都有自己的类 一切都很愉快 然而 不同的类有时会调用相同的方法 到目前为止 我只是在两个类
  • 尝试批量插入行时发生 Knexjs 错误:获取连接超时。泳池可能已经满了。

    完整错误 Knex 获取连接超时 池可能已满 您是否缺少 transacting trx 调用 我有一个超过 70k 行的 csv json 插入 15k 17k 次后 它停止并抛出上述错误 代码如下 csvtojson colParser
  • Microsoft Graph API 是否支持 Azure AD B2C 的更改通知?

    我正在尝试获取更改通知 以便用户使用连接到 Azure AD B2C 的应用程序 我按照以下教程操作并成功创建了订阅 但我从未收到任何更改通知 https learn microsoft com en us learn modules ms
  • 如何存储长符号计算的结果以供以后使用?

    我的计算是这样的 f x runs fast g x runs fast h x depends on f x g x runs slow 5mins 现在我只需要结果h x 每次我重新启动 mma 时 我基本上都会重做相同的计算以获得h
  • 将 JSON 转换为 .NET 数据集

    我正在编写一个 Java servlet 它使用http json org java http json org java 用于从 mssql 数据库读取一些数据并将结果集转换为 JSON 字符串的库 NET 客户端应用程序正在使用此 JS
  • 如何在Word宏中的TextBox中插入文本

    我在Word中创建了一个文本框 我想在其中插入文本 Sub k Dim Box As Shape Set Box ActiveDocument Shapes AddTextbox Orientation msoTextOrientation
  • 如何在谷歌地图 API v3 中一次仅显示一个信息窗口

    我们可以在谷歌地图中一次仅显示一个信息窗口 并为多个标记显示多个信息窗口吗 意味着 当我单击标记时隐藏 关闭其他信息窗口并仅显示当前标记信息窗口 Thanks 我解决的方法如下 var infoWindowsOpenCurrently A
  • C# 在方法或事件处理程序之间传递变量

    我仍在尝试学习 c 我的问题是如何将变量从 Item1 Click 传递到 Item2 Click 这与在方法之间传递它们是同一件事还是因为它们是事件处理程序而有所不同 public partial class Events System
  • K&R 第 2 版,示例 1.9 字符数组

    我对以下代码中的 getline 函数和参数定义有疑问 代码直接取自 K R 第 1 9 章 字符数组 我已将其逐字复制在这里 问题是 当我按原样编译程序时 出现三个错误 我在最后重现了这些错误 当我在出现错误的三个地方将函数和函数参数定义