如何确定导致分段错误的原因

2023-12-29

我的代码的目标是接受 2 个命令行参数(包括程序名称),并根据给定的第二个命令行参数打印出所示的响应。如果命令行参数是一个整数,则用户的输入被接受或“成功”,如果它是其他任何内容(例如字符串或多个命令行参数),则它将为 Null 并显示错误消息。这是针对熟悉 CS50 凯撒的人

我的代码如下:

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>

int main(int argc,string argv[])
{
 
    char *x = argv[1];
    if (argc == 2 && isdigit(x))
    {
        printf("Success\n");
    }
    else
    {
        printf("Usage: ./caesar key\n");
    }
    
}

代码可以编译,但出现分段错误。我知道分段错误是程序试图访问数组分配的内存之外的内容(如果我错了,请纠正我),但我确实指定了 argv[1]。


The isdigit作为参数,一个int,其中包含作为无符号字符的字符代码。

很遗憾isdigit通常作为宏实现,并且以这样的方式编写:如果您传递了错误类型的数据,则不会收到警告。你正在传递一个pointer到一个字符,该字符不是单个字符。第一个命令行参数的第一个字符是x[0]。然而这must被转换为unsigned char.

因此这些都是错误的

  • isdigit(x)

  • isdigit(x[0])

你可以用什么来检查第一个字符第一个参数的数字是

isdigit((unsigned char)x[0]))

但到底你什么want不是检查其中是否有数字,而是将字符串转换为整数,并查看是否发生错误 -use strto(u)l for x看看是否成功 https://stackoverflow.com/a/14176593/918959;然后检查结果值的范围。

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

如何确定导致分段错误的原因 的相关文章

随机推荐

  • Spring Webclient:非法参数异常没有足够的变量来扩展“comment_count”

    我正在使用 spring webclient 发出 Facebook graph api 请求 其 url 包含 comment count 但是 得到这个例外 java lang IllegalArgumentException Not
  • 为什么这个简单的汇编程序可以使用 AT&T 语法而不是 Intel 语法?

    这段代码有什么问题 在 x86 64 Linux 上运行 intel syntax text globl start start mov rax 1 mov rdi 1 mov rsi msg mov rdx 14 syscall mov
  • 如何在单击多个按钮时更改按钮颜色

    当页面加载其他两个不活动的按钮时 我有一个按钮需要处于活动状态 单击非活动按钮时 我需要从另一个按钮中删除活动类并将其添加到单击的按钮中 button click function clicked true if clicked this
  • python re.sub 模块中以 key 作为匹配组的字典查找

    python re sub 模块中以 key 作为匹配组的字典查找 解决方案1 不起作用 dict1 dict1 indu sharma dict1 abhi dutta text agan abhi indu Saikat text re
  • CallLog 内容提供商最多返回 500 个结果

    由于某种原因 如果我查询 CallLog 内容提供程序 我最多会得到 500 个结果 另外 我似乎只得到 1 个月前的结果 当我的设备电话应用程序目前显示大约 8 个月时 我用谷歌搜索了它 但我发现的只是 将 CallLog Calls 存
  • 我可以告诉或提示 RubyMine 本地变量或实例变量是什么类型吗?

    我正在尝试利用 RubyMine 快速文档和代码完成 我很高兴地发现它如何很好地集成了 YARD 风格的注释 param Numeric width param Array
  • 使用 AFNetworking 加载离线缓存的 JSON

    我一直在尝试使用 AFNetworking 实现缓存 以便我的缓存 JSON 将离线加载 我以不同的方式尽了最大努力 但根本无法使缓存工作 我不知道我在这里错过了什么 这是我的代码AppDelegate func application a
  • 使用空合并运算符进行隐式转换

    我发现我的程序有一个奇怪的行为 经过进一步分析 我发现我的 C 知识或其他地方可能有问题 我相信这是我的错误 但我无法在任何地方找到答案 public class B public static implicit operator B A
  • Javascript对象根据属性有效求和值

    我在 JS 数组中确实有三个对象 如下所示 2013 03 02T00 00 300 2013 03 01T00 00 200 2013 03 02T00 00 50 我想要类似下面的内容作为上面数组的输出 2013 03 02T00 00
  • Swift:使用 NSOperation 保留循环

    在我的应用程序中 我使用图像加载器类从网络加载图像以用于集合视图 该类跟踪下载操作 并在图像单元格在集合视图中不再可见时取消下载操作 此实现基于 NSOperation 的 raywenderlich 教程 http www raywend
  • 有没有办法在查询中使表名动态化?

    我正在尝试为产品创建类继承设计 有一个包含所有公共字段的基表 然后 对于每种产品类型 都有一个单独的表 其中包含仅适用于该产品类型的字段 因此 为了获取产品的所有数据 我需要JOIN基表以及与相关的任何表product type列在基表中
  • Promise.resolve().then 与 setImmediate 与 nextTick

    NodeJS 0 11 以及 io js 和 Node 0 12 分支都带有原生 Promise 原生承诺have a then method https developer mozilla org en US docs Web JavaS
  • MVC3 提交 Ajax 表单

    我已经阅读了很多关于这个主题的不同帖子 我将继续这样做并尝试各种事情 尽管信息差异很大 但由于我对 MVC 等相对缺乏经验 我觉得我有点绕圈子 情况是这样的 我正在 MVC3 应用程序中显示 Razor 视图 其中包含 jqGrid 中的记
  • 仅在 CopyObject 中拒绝 Amazon S3 访问

    我从 nodejs 脚本上传文件 当我尝试复制对象时 我收到 访问被拒绝 错误 如果我尝试删除该对象或获取它 没有问题并且成功 CopyObject 中有什么特殊的吗 params Bucket buacket name CopySourc
  • 使用 Ajax 更新 Rails 中的元素

    该应用程序允许用户对嵌入视频进行投票 当用户点击上下箭头时 整个页面刷新更新points 几个月来我一直在尝试实现 AJAX 投票 我想要您能提供的最直接的解决方案 即使它不是最有效的 有任何想法吗 My up and down行动来自ap
  • 我可以在我的桌面应用程序中使用谷歌语音识别 API

    我想知道我是否可以在我的桌面应用程序中使用 google 的语音识别 api 我见过一些示例 其中我必须将语音转换为文件并发送到网址 但这将是一个不太麻烦的任务 因为在我的应用程序中 用户必须不断提交他的声音 那么还有其他替代方法可以使用
  • iOS SWRevealViewController - 在控制器之间传递数据

    我正在使用 SWRevealViewController 在我的应用程序中实现滑动菜单 从左侧 一切工作正常 但现在我面临一个小问题 我想从我的 主 视图控制器传递数据 完全可见的控制器 我不称其为 frontViewController
  • 分离的实体传递到持久化

    使用 hibernate 3 6 10 maven 2 postgres 9 我有必须工作的代码 但事实并非如此 在我使用 hibernate 3 6 2 并遇到非常沮丧的错误之前 java lang ClassCastException
  • Composer 未安装本地包依赖项

    在我的 Laravel 5 4composer json 文件中 我有以下内容可以自动加载我的自定义包 请注意 该包尚未发布 而是在本地加载 autoload classmap database seeds database factori
  • 如何确定导致分段错误的原因

    我的代码的目标是接受 2 个命令行参数 包括程序名称 并根据给定的第二个命令行参数打印出所示的响应 如果命令行参数是一个整数 则用户的输入被接受或 成功 如果它是其他任何内容 例如字符串或多个命令行参数 则它将为 Null 并显示错误消息