接受主要参数

11 浏览
0 Comments

接受主要参数

我的代码有问题。我想知道"variation"的值是什么。但它总是给我非常高或负数的值。所以当我在终端中输入例如"./NAME 3",我得到另一个数字。我该如何修复它?

#include 
#include 
int main(int argc, string argv[])
{
    int variation = (int)argv[1];
    if (argc == 2)
    {
        printf("%i\n", variation);
        return 0;
    }
    else
    {
        return 1;
    }
}

0
0 Comments

C语言中没有内置的string类型,而是使用字符数组来表示字符串。在给定的代码中,使用stdlib中内置的atoi函数将字符串转换为整数。代码中判断了命令行参数的个数,如果只有一个参数,则将其转换为整数并打印输出;如果没有参数,则输出"no agrument provided.";如果参数个数大于1,则输出"only one argument was expected. x provided."。

更新后的代码使用了更安全的strtol函数来将字符串转换为长整型。代码中增加了错误检测的部分,根据不同的错误情况输出相应的错误信息。如果输入的字符串不是数字,则输出"error: no number found";如果转换后的值超出了长整型的范围,则输出"error: underflow"或"error: overflow";如果转换过程中发生了其他未知错误,则输出"error: unknown error";如果转换成功且没有额外的非数字字符,则输出"variation: x";如果转换成功但存在额外的非数字字符,则输出"variation: x, but some text included: x"。

为了增加代码的安全性,建议使用strtol函数而不是atoi函数。atoi函数无法进行错误检测。特别是在用户输入的情况下,由于用户输入是不可靠的,所以安全函数更可取。如果用户输入的是非数字字符,如"./Name hello"或"./Name 3.4",或超出了整型范围,如"./Name 2147483648",使用atoi函数将无法正确处理。

strtol函数更安全可靠,可以对转换过程中的错误进行检测,因此在学习C语言时,应该优先学习strtol函数而不是atoi函数。

代码示例中的var_str变量是多余的,只有在只有一个参数的情况下才会使用到。但如果只有一个参数的用例是有限制的情况下,这个问题不会造成影响。

在教学初学者时,应该教授安全的方法,避免使用不安全的方法。C语言中存在许多潜在的危险,对于初学者来说,这些危险往往是隐藏的。如果选择C语言,就需要了解这些危险。

最后,通过面对危险,我们才能变得更加强大。对于初学者来说,可能会遇到一些奇怪的未定义行为,然后他们会提出新的问题,询问如何使用可以进行错误检测的安全方法。

整理内容如下:

C语言中没有内置的string类型,而是使用字符数组来表示字符串。在给定的代码中,使用stdlib中内置的atoi函数将字符串转换为整数。代码中判断了命令行参数的个数,如果只有一个参数,则将其转换为整数并打印输出;如果没有参数,则输出"no agrument provided.";如果参数个数大于1,则输出"only one argument was expected. x provided."。

更新后的代码使用了更安全的strtol函数来将字符串转换为长整型。代码中增加了错误检测的部分,根据不同的错误情况输出相应的错误信息。如果输入的字符串不是数字,则输出"error: no number found";如果转换后的值超出了长整型的范围,则输出"error: underflow"或"error: overflow";如果转换过程中发生了其他未知错误,则输出"error: unknown error";如果转换成功且没有额外的非数字字符,则输出"variation: x";如果转换成功但存在额外的非数字字符,则输出"variation: x, but some text included: x"。

为了增加代码的安全性,建议使用strtol函数而不是atoi函数。atoi函数无法进行错误检测。特别是在用户输入的情况下,由于用户输入是不可靠的,所以安全函数更可取。如果用户输入的是非数字字符,如"./Name hello"或"./Name 3.4",或超出了整型范围,如"./Name 2147483648",使用atoi函数将无法正确处理。

在教学初学者时,应该教授安全的方法,避免使用不安全的方法。C语言中存在许多潜在的危险,对于初学者来说,这些危险往往是隐藏的。如果选择C语言,就需要了解这些危险。

通过面对危险,我们才能变得更加强大。对于初学者来说,可能会遇到一些奇怪的未定义行为,然后他们会提出新的问题,询问如何使用可以进行错误检测的安全方法。因此,在学习C语言时,应该优先学习strtol函数而不是atoi函数。

0