簡體   English   中英

用命令行參數填充數組

[英]Filling an array with command line parameters

我需要用一些作為命令行參數傳遞的單詞來填充array [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個字母怎么辦?

argc參數count的縮寫,因此,以下語句: if(argc > 17)實際上是在測試命令行參數的數量,而不是每個參數的字符數。

此外,輸入參數char *argv[] (其中argv表示參數向量的縮寫)可以容納每個命令行參數任意數量的char

用命令行參數填充數組
如果您想將命令行參數的內容捕獲到一個數組中,則動態分配的一組緩沖區,或者最好是一個可變長度的數組 (可從C99開始使用)都適合該任務。 可以使用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;
}

示例輸出的參數是“ this that和另一件事,並且是很長的參數,表明argv可以容納
在此處輸入圖片說明

示例輸出使用帶空格的參數:
“ this that”和“ other something”的爭論由來已久,以表明argv可以適應
在此處輸入圖片說明

編輯以解決注釋中的澄清。

以下測試(並限制) ROWS最大參數數量,並允許參數的長度限制超過COLUMNS-1 ,但如果過長則修剪到長度。 如果字符串的長度小於COLUMNS-1 ,請用&填充剩余空間。 如果字符串包含任何空格,請將其替換為& ...

#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語言正常”
在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM