c命令行参数

c命令行参数,c,command-line,command,C,Command Line,Command,给出少于3个参数时出现分段错误。 如果给出的参数少于3个,则应打印的参数不足,但会给出错误分段错误 输入:./a raju 预期输出:参数不足 当argc为2时,argv[2]将为空。当程序运行的第一件事就是执行这行代码时,您希望它能做什么 重构以使其下面的条件形成对该条件的防范,这里有一些更接近您可能想要的: int c = convert(argv[2]); 另外,由于argv[0]通常是程序名而不是参数,argv[1]和argv[2]将是您的参数,argv[3]将为空,如果您计算它们,您

给出少于3个参数时出现分段错误。 如果给出的参数少于3个,则应打印的参数不足,但会给出错误分段错误

输入:./a raju 预期输出:参数不足

当argc为2时,argv[2]将为空。当程序运行的第一件事就是执行这行代码时,您希望它能做什么

重构以使其下面的条件形成对该条件的防范,这里有一些更接近您可能想要的:

int c = convert(argv[2]);
另外,由于argv[0]通常是程序名而不是参数,argv[1]和argv[2]将是您的参数,argv[3]将为空,如果您计算它们,您将计算两个参数,而不是三个;当给出三个参数时,预期argc==4。

您可能会感兴趣。它处理命令行参数的所有标准特性。

在检查之前使用argv[2]是个坏主意,我想。。。真的,难道你不能校对你自己的代码而不是疯狂的格式化吗?
int c = convert(argv[2]);
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int convert(char *str)
{
  int i, number = 0;
  for (i = 0; str[i] != '\0'; ++i) {
    number = number * 10 + str[i] - '0';
  }
  return number;
}

int main(int argc, char *argv[])
{
  if (argc != 3) {
    printf(  argc < 3   ? "Not Enough Arguments\n"
           /*argc > 3*/ : "Too Many Arguments\n"  );
    exit(EXIT_FAILURE);
  }

  int c = convert(argv[2]);
  for (int j = 0; j < c; j++) {
    printf("Hello, %s!\n", argv[1]);
  }
  return 0;
}