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