用命令行参数填充数组

Filling an array with command line parameters

我需要用一些作为命令行参数传递的单词填充数组[2][8](单词应该用空格分隔)。我不知道如何将 CLP 连接到我的阵列。如果我有超过 17 个字母怎么办?

我写代码只是为了统计和打印参数。

#define ROWS 2
#define COLUMNS 8
int main(int argc, char const *argv[])
{
  int counter;
  if(argc > 17)
  {
     printf("Too many elements!");
     return 0;
  }
  printf("Command line includes %d parameters:\n", argc - 1);
  for(counter = 1; counter < argc; counter++)
  printf("%d: %s\n", counter, argv[counter]);
  return 0;
}

编辑:我必须使用指针。数组 [2][8] 必须用单词填充,然后我们放置空格。我认为 2x8 数组正好存储 16 个字符,包括空格。不知道超过16个字怎么显示

如果我有超过 17 个字母怎么办?

argcargument count 的缩写,所以语句:if(argc > 17) 实际上是测试命令行参数的数量,而不是计数每个字符的字符数。

此外,输入参数 char *argv[](其中 argv 参数向量 的缩写)以容纳任意数量的 char每个命令行参数。

用命令行参数填充数组
如果您想将命令行参数的内容捕获到一个数组中,可以是一组动态分配的缓冲区,或者最好是 variable length array(可从 C99 on) 适合该任务。可以在循环中使用 argc(参数的数量)和 argv[i]strlen 来获得数组(任一类型)的维度,以获得所有参数的最长长度.这种技术的一个例子解决了你下面的标题问题。

使用 VLA 的示例:

int main(int argc, char const *argv[])
{
  int counter;
  int len, maxLen=0;

  // find the longest length parameter
  for(counter = 0; counter < argc; counter++)
  {
      len = strlen(argv[counter]);
      if(len > maxLen) maxLen = len;
  }

  //using a variable length array, create a container for all parameters
  char array[argc][maxLen + 1];// +1 to allow room for null terminator

  // transfer contents of argv to VLA array
  for(counter = 0; counter < argc; counter++)   
  {
      strcpy(array[counter], argv[counter]);//copy CLPs into array
  }

  printf("Command line includes %d parameters:\n", argc - 1);
  for(counter = 1; counter < argc; counter++)
  printf("%d: %s\n", counter, array[counter]);
  return 0;
}

参数的示例输出"这个和其他东西和一个很长的参数来显示那个 argv 可以适应

示例输出使用带白色的参数 space:
"this that" 和 "other thing" 和一个很长的参数来表明 argv 可以容纳

编辑 以解决评论中的说明。

以下测试(和限制)参数的最大数量 ROWS ,并允许参数的长度限制超过 COLUMNS-1,但如果太长则修剪到长度。如果字符串长度小于 COLUMNS-1,则剩余的 space 填充为 &。如果字符串包含任何白色 space,将其替换为 &...

#define ROWS 2
#define COLUMNS 8
int main(int argc, char const *argv[])
{
  int counter, i;

  char array[ROWS][COLUMNS];

  if(argc > 3) 
  {
      printf("Too many arguments.  2 max.\n(Hit any character to exit.)");
      getchar();
      return 0;
  }


  for(counter = 0; counter < argc-1; counter++) 
  {   //trim to legal string length.
      strncpy(array[counter], argv[counter+1], COLUMNS-1);
      array[counter][COLUMNS-1]=0;//set last char to null
      for(i=0;i<COLUMNS-1;i++)
      {   //test for any white space or NULL 
          //character within legal string length
          if((isspace(array[counter][i])) || array[counter][i] == NULL) array[counter][i] = '&';
      }
  }

  printf("Command line includes %d parameters:\n", argc - 1);
  for(counter = 0; counter < argc-1; counter++)
  printf("%d: %s\n", counter, array[counter]);
  return 0;
}

示例参数的结果 - echo.c "c language is ok":