【问题标题】:Dereference Operator when using with argv[i]与 argv[i] 一起使用时的取消引用运算符
【发布时间】:2020-02-03 05:38:45
【问题描述】:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    if (isdigit(*argv[1]))
    {
        int x = atoi(argv[1]);
        printf("%d\n", x);
    }
    return 0;
}

我不明白为什么在使用isdigit() 时需要星号以及为什么在使用atoi() 时不需要星号

【问题讨论】:

  • 阅读 isdigitatoi 手册页。每个参数的类型是什么?
  • 仅供参考,isdigit(*argv[1]) 应该是 isdigit((unsigned char) *argv[1]),因为 C 标准不保证 isdigitchar 有效,除了基本字符集。

标签: c dereference


【解决方案1】:

argv[1] 是一个字符串,所以*argv[1] 是字符串中的第一个字符。与argv[1][0] 相同。因此,调用isdigit(*argv[1]) 会检查字符串中的第一个字符是否为数字。

该测试用于检查参数是否(可能)是一个数字,然后将整个字符串传递给 atoi() 以获取整个值。

【讨论】:

    猜你喜欢
    • 2020-04-14
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2020-01-23
    • 2022-01-01
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多