【问题标题】:Command-line argument modification - C programming命令行参数修改 - C 编程
【发布时间】:2014-08-05 13:45:27
【问题描述】:
int main(int argc, char** argc) {

.....


if(argc != 6 && int argc[1] <30 && int argc[2] <30) {
    }
}

大家好,我正在尝试对 main 函数的命令行参数进行字符限制。这将限制输入的第二个和第三个参数的长度小于 30 个整数。我收到的错误是“错误:下标值既不是数组也不是指针”。在 C 中,这是我访问每个 arg、argc0、argc[1](第二个参数)等的索引值的方式吗? 任何澄清都会很棒!谢谢。

【问题讨论】:

  • “长度小于 30 个整数”是什么意思?与字符串参数中的 30 个字符一样吗?
  • 参数必须低于 30 个东西,即。单元格,或行、列等
  • 另外,为什么在引用 argc 之前有 int 关键字?你应该只需要在声明或强制转换时指定类型

标签: c if-statement command-line arguments


【解决方案1】:

更改
if(argc != 6 &amp;&amp; int argc[1] &lt;30 &amp;&amp; int argc[2] &lt;30)

if(argc != 6 &amp;&amp; strlen (argv[1]) &lt;30 &amp;&amp; strlen (argv[2]) &lt;30)

char* argv[] 是关于参数的。

【讨论】:

  • 您在strlen 通话中缺少(
  • 抱歉,
  • 那么你需要atoi()函数。这将使您的参数成为整数,以便您可以检查它是否小于 30。
  • 规范已经移动!你不只是讨厌那个吗? +1 正确回答原始问题。
  • @Bathsheba 我刚刚删除了多余的括号。
【解决方案2】:

试试这个:

int main(int argc, char** argv)
{
    //...
    if(argc != 6 && strlen(argv[1]) < 30 && strlen(argv[2]) < 30)
    {
        //do stuff
    }
}

首先,您的两个参数都命名为argc,这是不对的,但我认为这只是一个错字。

其次,argv 是一个指向字符串的指针(它本身就是一个指向字符的指针)。这意味着您无法在没有其他函数调用或强制转换的情况下将其值与整数进行比较。在这种情况下,我假设您的意思是将参数长度限制为 30 个字符。

如果您不想根据参数的长度而限制参数的值,则需要使用函数调用来获取字符串中的值。

例如,如果您想根据参数的数值限制参数,请将 strlen 替换为 atoi,但请注意,如果用户输入非数字输入,您会得到奇怪的值。

【讨论】:

  • 您应该将 argc[1] 更改为 argv[1]。
  • 抱歉,
  • @Nancy 谢谢,已修复。
  • @Sam23yo argv[1] 始终是一个字符串,我是否正确理解您期望的字符串是一组像“23”这样的数字?并且您希望该数值小于 30?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多