0

没有办法知道有多少参数。用户可以提供一个不确定长度的列表。

我对 C 语言非常不好。如何将参数从命令行数组中读取到新的字符串数组中?

坦率地说,我什至不知道如何制作一组单独的字符串,如果我要诚实的话。一个例子会非常有帮助。

4

3 回答 3

3

就在这里。

如果您查看主函数的完整原型:

int main(int argc, char **argv, char **env)

argc:这是参数计数器,它包含用户给出的参数数量(假设命令为cd,输入cd home将给出 argc = 2,因为命令名称始终为参数 0)

argv :这是参数值,它是一个大小为argc的数组,char*指向参数本身。

env:这是一个表(作为 argv),其中包含调用程序时的环境(例如,通过 shell,它由env命令给出)。

至于制作一系列事物的示例:两种方法是可能的:

首先,一个固定长度的数组:

char tab[4]; // declares a variable "tab" which is an array of 4 chars
tab[0] = 'a'; // Sets the first char of tab to be the letter 'a'

二、变长数组:

//You cannot do:
//int x = 4;
//char tab[x];
//Because the compiler cannot create arrays with variable sizes this way
//(If you want more info on this, look for heap and stack memory allocations
//You have to do:
int x = 4; //4 for example
char *tab;
tab = malloc(sizeof(*tab) * x); //or malloc(sizeof(char) * x); but I prefer *tab for
//many reasons, mainly because if you ever change the declaration from "char *tab"
//to "anything *tab", you won't have to peer through your code to change every malloc,
//secondly because you always write something = malloc(sizeof(*something) ...); so you
//have a good habit.

使用数组:

无论您选择声明它的任何方式(固定大小或可变大小),您始终以相同的方式使用数组:

//Either you refer a specific piece:
tab[x] = y; //with x a number (or a variable containing a value inside your array boundaries; and y a value that can fit inside the type of tab[x] (or a variable of that type)
//Example:
int x = 42;
int tab[4]; // An array of 4 ints
tab[0] = 21; //direct value
tab[1] = x; //from a variable
tab[2] = tab[0]; //read from the array
tab[3] = tab[1] * tab[2]; //calculus...
//OR you can use the fact that array decays to pointers (and if you use a variable-size array, it's already a pointer anyway)
int y = 21;
int *varTab;
varTab = malloc(sizeof(*varTab) * 3); // An array of 3 ints
*varTab = y; //*varTab is equivalent to varTab[0]
varTab[1] = x; //Same as with int tab[4];
*(varTab + 2) = 3; //Equivalent to varTab[2];
//In fact the compiler interprets xxx[yyy] as *(xxx + yyy).

给变量加星号称为取消引用。如果您不知道这是如何工作的,我强烈建议您看一下。

我希望这解释得很好。如果您仍有疑问,请发表评论,我将编辑此答案。

于 2012-04-18T15:09:32.587 回答
0
int main ( int argc, char *argv[] ) {

}

这就是您声明主入口函数的方式。 argc是用户输入的参数数量,包括程序名称,它是argv( argv[0]= 程序名称) 中的第一个字符串。

由于 argv 已经是一个字符串数组,我建议你使用它,因为这就是它的用途。(只是不要忘记跳过索引 0)

于 2012-04-18T15:09:24.427 回答
0
 int main(int argc, char *argv[]) 

这就是你的程序中 main 的样子。 argc是传递给程序的参数数量。argv是一个字符串列表,它们是传递给程序的参数,argv[0] 是程序名称。

于 2012-04-18T15:09:40.637 回答