我需要用一些作为命令行参数传递的单词来填充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个字母的限制时,我不知道如何显示。
答案 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 的示例输出。
示例输出使用带空格的参数:
“ this that”和“ other something”的争论由来已久,表明argv可以容纳
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;
}