用命令行参数填充数组
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 个字母怎么办?
argc
是 argument 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;
}
我需要用一些作为命令行参数传递的单词填充数组[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
是 argument 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;
}