用命令行参数填充数组

时间:2019-01-04 13:16:31

标签: c arrays command line

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

我编写的代码仅用于计数和打印参数。

Traceback (most recent call last):
  File "main.py", line 7, in <module>
driver = webdriver.Chrome()
  File "/opt/bitnami/apps/django/django_projects/ENV/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
  File "/opt/bitnami/apps/django/django_projects/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
  File "/opt/bitnami/apps/django/django_projects/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
  File "/opt/bitnami/apps/django/django_projects/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
  File "/opt/bitnami/apps/django/django_projects/ENV/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location /usr/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
  (Driver info: chromedriver=2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5),platform=Linux 4.9.0-8-amd64 x86_64)

编辑:我必须使用指针。数组[2] [8]必须用单词填充,然后在其中放置空格。我认为2x8数组正好存储16个字符,包括空格。当您超过16个字母的限制时,我不知道如何显示。

1 个答案:

答案 0 :(得分:2)

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

argc argument count 的缩写,因此语句:if(argc > 17)实际上是在测试命令行参数的数量,而不是每个字符的数量

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

使用命令行参数填充数组
如果要将命令行参数的内容捕获到数组中,则可以动态分配一组缓冲区,或者最好是 variable length array (可从C99开始)适合任务。可以使用argc(参数数量)和strlen中的argv[i]循环获得数组的尺寸(任意类型),以获取所有参数的最长长度。此技术的一个示例在下面解决了您的标题问题。

使用 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 and the other something andareally longargument to show that argv cancommate 的示例输出。
enter image description here

示例输出使用带空格的参数:
“ this that”和“ other something”的争论由来已久,表明argv可以容纳
enter image description here

EDIT 解决评论中的澄清问题。

以下测试(和限制)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语言正常”
enter image description here