繁体   English   中英

c命令行参数

[英]c command line arguments

#include <stdio.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[])
{
  int j;
  int c = convert(argv[2]);
  if (argc == 3) {
    for (j = 0; j < c; j++) {
      printf("Hello, %s!\n", argv[1]);
    }
  } else if (argc < 3) {
    printf("Not Enough Arguments\n");
  } else if (argc > 3) {
    printf("Too Many Arguments\n");
  }
  return 0;
}

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

输入: ./a raju预期输出: not enough arguments

int c = convert(argv[2]);

argc为2时, argv[2]将为NULL 您希望这行代码能做什么,因为程序运行时首先要执行它?

进行重构,以使其下方的条件构成针对该条件的保护,这与您可能想要的目的更接近:

#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;
}

PS由于argv[0]通常是程序名称而不是参数,因此argv[1]argv[2]将作为您的参数, argv[3]将为NULL ,如果您对它们进行计数,则将计算两个参数,而不是三; 当给出三个参数时,期望argc == 4

您可能对getopt.h库感兴趣。 它处理命令行参数的所有标准功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM