为什么第二个参数不适用于strtol?

Avatar_Hiro

我做了这样的事情:

/* convert the argv[1] into Integer and store the result in key
 * using library function: strtol() to do it */
char **flag = NULL;
key = strtol(argv[1], flag, 10);

// if argv[1] is not all digits
if (**flag != '\0')
{
    printf("Usage: ./caesar key\n");
    return 1;
}

但这会引发分段错误。我不知道为什么。

在C文档中,strtol原型为long int strtol(const char *nptr, char **endptr, int base)为什么会出现细分错误?

并更改代码的某些部分时char *flagstrtol(argv[1], &flag, 10)if (*flag != '\0')如预期一切正常。

我了解(某种程度)如何进行编辑来更正代码。但是,我不知道为什么原始代码不起作用。有人有线索吗?

ALK

不知道为什么原始代码不起作用?有人有任何线索吗?

因为这里

char **flag = NULL;

flag设置为NULL,然后在这里

key = strtol(argv[1], flag, 10);

flags的value(NULL)传递给strtol(),它不会flags以任何方式更改,而是NULL在调用之前和之后strtol()

终于在这里

if (**flag != '\0')

flag具有值的NULL,将被取消引用,从而调用未定义的行为,这可能导致任何事情,在您的情况下,这是崩溃。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有等待/通知功能的生产者消费者代码不适用于第二个生产者

String.Format()以零开头的十六进制不适用于第二个参数

while循环不适用于第二个循环

为什么html_entity_decode()适用于第一个字符串,而不适用于第二个字符串?

jQuery .on适用于第一个html,但不适用于第二个(相同格式)

Angular 1 ng模型不适用于第二个输入字段

第二个管道运算符不适用于python中的正则表达式

For循环仅适用于带有React钩子的第二个循环

为什么第二个角色对第二个变量迷路

Chart.js两个y轴折线图工具提示值不适用于第二个y轴

htaccess第二个重写规则不适用于生产

我的第二个端点不适用于node-js API,为什么?

MySQL-WHERE子句中的NOT IN查询具有与第一个表相同的结构,但不适用于第二个表

NOPASSWD选项不适用于第二个命令

省略号适用于第二个跨度,但不适用于第一个

休眠条件setReadOnly不适用于第二个查询

第二个html文件上的按钮不适用于Flask

MySQL 触发器适用于同一个表中的一个字段,而不适用于第二个字段

为什么它适用第二个参数?

Html/CSS/Javascript:弹出 onclick 不适用于第二个 div

AdjustResize 不适用于第二个 EditText

Alexa 技能:适用于第一个问题,但不适用于第二个问题

malloc 不适用于列表的第二个元素

Selenium span 单击适用于 1 个日历,但不适用于第二个日历(Python)

猫鼬中的唯一性不适用于第二个领域

React Native 道具不适用于第二个包含

Jquery Onclick 函数不适用于第二个数据表的其他页面

文件 .htaccess 不适用于具有破折号且未应用第二个 RewriteRule 的 URL

Axios 请求仅适用于第二个请求