为什么要检查 if (*argv == NULL)? [复制]

2024-04-08

在我目前正在学习的数据结构课程中,我们的任务是用 C++ 编写一个网络爬虫。为了让我们抢占先机,教授为我们提供了一个从给定 URL 获取源代码的程序,以及一个简单的 HTML 解析器来剥离标签。该程序的 main 函数接受参数,因此使用 argc/argv。用于检查参数的代码如下:

// Process the arguments
if (!strcmp(option, "-h"))
{
    // do stuff...
}
else if (!strcmp(option, ""))
{
    // do stuff...
}
else if (!strcmp(option, "-t"))
{
    // do stuff...
}
else if (!strcmp(option, "-a"))
{
    // do stuff...
}

if ( *argv == NULL )
{
    exit(1);
}

其中“option”已使用 argv[1] 中的开关填充,argv[2] 及更高版本具有剩余参数。我理解的第一个块很好,如果开关等于字符串,则根据开关执行任何操作。我想知道最后一个 if 块的目的是什么。

可能是我的 C++ 有点生疏,但我似乎记得 *argv 相当于 argv[0],基本上意味着它正在检查以确保参数存在。但我的印象是 argv[0] 总是(至少在大多数实现中)包含正在运行的程序的名称。我发现如果 argc 等于 0,argv[0] 可能为 null,但是在 Google 上搜索我找不到任何帖子来确定这是否可能。

所以我转向你。最终的 if 块检查到底是什么?

EDIT:我已经接受了所选答案的注释中提供的推理,即可能故意导致 argv[0] 变为 NULL,或者基于 main 的特定于平台的实现变为 NULL。


3.6.1/2:

如果 argc 非零那些论点 应在 argv[0] 中提供 ...并且 argv[0] 应该是指针 NTMBS 的初始字符 代表所用的名称 调用程序或“”。的价值argc应为非负数。价值 的argv[argc]应为 0。

强调我的。 argc 只保证非负数,而不保证非零。

这是 main 的入口。也有可能是//do stuff修改的值argv,或者它指向的数组的内容。选项处理代码在处理 argv 时将值移出的情况并非完全闻所未闻。测试为*argv == null因此,在删除或跳过选项后,可能会测试是否还剩下任何命令行参数。您必须查看其余的代码。

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

为什么要检查 if (*argv == NULL)? [复制] 的相关文章

  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 原则 2 OneToMany 级联 SET NULL

    错误 无法删除或更新父行 外键约束失败 课程 class Teacher ORM OneToMany targetEntity publication mappedBy teacher protected publications clas
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • “DOM 0 方式”检索 HTML 属性值

    jQuery 有一个attr 检索给定 HTML 属性值的方法 例如 var foo document getElementById foo foo attr id 但是 从性能角度来看 这并不是最佳选择 因为必须创建 jQuery 对象才
  • 在 iOS 应用程序中以编程方式获取崩溃报告

    我想在我的应用程序内访问我的应用程序的崩溃报告 并且我需要将崩溃报告发送到服务器 我在 google 中搜索 找不到任何可以帮助我实现目的的 API 但我发现有一些开源项目 例如 QuincyKit plcrashreporter 用于获取
  • Dart 内部的 wait 到底做了什么?

    我正在开发一个需要使用本地存储的颤振应用程序 由于Android中的文档目录路径将在Future中给出 因此每次我想使用该路径时 我都必须检查future是否完成 代码可能类似于下面 class DataStructure late Fut
  • 使用应用程序脚本更新多个选项卡

    我有一张名为 Main Sheet 的工作表 Col B 中的每个列值都有多个选项卡 东 中 每周都会有新记录添加到主表中 我想要一个谷歌应用程序脚本函数将新行从 Main Sheet 选项卡插入到相应的选项卡 输入表 主表 输出表东方 中
  • 在 R 中使用 knitr 和 markdown 自定义 CSS

    我发现了这个很棒的教程 介绍如何修改在 Rstudio 中使用 markdown 和 knit 创建的 HTML 报告的 css 格式 帖子可以找到here http nsaunders wordpress com 2012 08 27 c
  • Html.BeginForm 外部的提交按钮

    在我的页面上 我有来自母版页的工具栏和一些输入字段 所有输入字段都在标签内form和标签外部的工具栏form 按下外部按钮后是否可以提交表单form tag 请建议 亚历山大 你可以用 JavaScript 来做到这一点
  • ems和像素之间有什么关系?

    em 的像素值是多少 10em px em 和 px 之间没有特定的关系 它是根据每个字体的 m 字符的宽度计算的
  • 添加加载指示器/进度条到 Phonegap Android 闪屏

    我有一个 PhoneGap 1 4 1 jQueryMobile 1 0 1 Android 项目 它显示 res drawable splash png 很好 一旦加载 WebView 闪屏就会消失 我想在启动画面中添加某种进度指示器百分
  • Android Studio ML 套件无法加载 OCR 模块

    我正在开发一个涉及 ML 套件的 Android 应用程序 我经历了tutorial https firebase google com docs android setup了解如何设置 Android Studio 以与 Firebase
  • 在第 n 次出现后删除字符串的其余部分

    我有以下字符串 a this is a string 我希望删除第三个 之后的所有内容符号 以便它返回 trim a gt gt gt this is a 而没有第三个 的字符串应该返回自身 这个答案 如何删除python中特定字符之后的所
  • 将 XAML 转换为 FlowDocument 以在 WPF 中的 RichTextBox 中显示

    我有一些 HTML 我正在使用 Microsoft 提供的库将其转换为 XAML string t HtmlToXamlConverter ConvertHtmlToXaml mail HtmlDataString true 现在 从如何将
  • RuntimeException在android中导致ANR而不是崩溃

    我两次都收到 ANR throw new NullPointerException random null pointer and while true 仅在异常部分VM实际关闭 D AndroidRuntime 关闭VM 第二个问题是 如
  • 角度、材料侧导航和粘性工具栏

    我正在尝试 Material Side nav 和 Angular 6 7 我想要实现的目标显示在接下来的两张图片中 具有折叠侧面导航的应用程序 该应用程序具有扩展的侧面导航 简而言之 可以通过按钮打开和关闭的侧面导航 a fixed内容上
  • JTextField setActionCommand() 的目的是什么[如何以编程方式访问它以查找事件发生在哪个单元格?]

    原始帖子后几个月编辑 这个问题的动机是需要知道单击按钮时 11x11 网格 JTextField 数组 的哪个单元格处于活动状态 我问了错误的问题并选择了错误的工具 setActionCommand 尽管它当时通过字符串操作起作用 我最终选
  • 何时在 .NET 中使用 Array() 而不是 Generic.Lists

    在 NET 中什么时候适合使用数组而不是通用列表 T 我一直很难看到数组比通用列表提供的任何好处 但感觉我可能错过了一些东西 性能是让我印象深刻的一件事 因为它是一个潜在的瓶颈 Thanks 当您使用固定数量的给定类型的对象时 没有必要承受
  • Paypal 沙盒显示错误

    单击 继续 按钮登录后 Paypal 沙箱显示错误 Error no template specified at engine x ebay cronus software service nodes ENVaqqittlg2x28 uni
  • Java JProgressBar 使用图像

    我正在用 Java 制作一个游戏 并且我正在使用JProgressBar为了健康吧 我想使用图像 而不是颜色 JProgressBar 但我一直没能做到 我尝试过使用绘画方法 paintComponent方法 创建一个新类 但它不起作用 有
  • 将 ActionCable 发送给特定用户

    我有以下代码 它在我的 Rails 应用程序中发送 ActionCable 广播 ActionCable server broadcast notification channel notification Test message 连接如
  • 一个 Web 应用程序上具有多个域的 IIS

    我正在构建一个Web应用程序 on IIS 与 asp net 其概念如下 客户购买域名 然后从 20 30 个现成模板中选择一个模板 现在应用程序驻留在说www mywebappblabla com usersites 用户域是www m
  • 为什么要检查 if (*argv == NULL)? [复制]

    这个问题在这里已经有答案了 在我目前正在学习的数据结构课程中 我们的任务是用 C 编写一个网络爬虫 为了让我们抢占先机 教授为我们提供了一个从给定 URL 获取源代码的程序 以及一个简单的 HTML 解析器来剥离标签 该程序的 main 函