[noobagain]如何将argv []存储到数组中?

 收藏

嗨,大家好,我正在学习C语言,但我仍然不清楚一些概念。 我必须创建一个从ARGV []获取值并将其放入向量的程序:

该程序将像这样工作:

./program file1 file2 file3

My idea was to do something like:

n=argc
char command[argc]

for(i<argv) { strcpy(command[i], argv[i+1]) }

But I get a warning.
I think I'm messing up the pointers, char, etc.

What I imagine I'm doing with that code line is creating someting like...

ARGV                     ------------->           command  
[program]                 strcpy...               [file1  ]
[file1  ]                                         [file2  ]
[file2  ]                                         [file3  ]
[file3  ]

...但可能只在我脑海中!我在做什么?应该怎么写才能工作???

回复
  • Oo晓oO 回复

    char command []只是一个简单的字符数组,或者是一个字符串,例如“ Hello”。您不能同时存储多个字符串。

    char * command []是指向字符串的数组,这是程序所需要的。表达它的另一种方法是char **命令。

    所有较早的编译器都需要一个常量整数来表示数组中的元素数,例如char * command [20]。最新的C标准还允许它成为变量,例如char * command [argv]。您可能必须对其进行测试,以找出编译器支持的形式。编译器接受哪种方式都必须在程序中保持一致,不要在一处使用char **命令,而在另一处使用char * command [],因为编译器也会抱怨这一点。

    If you are still confused about pointers then maybe you should study this tutorial.

  • Pete 回复

    字符命令[argc]

    您需要创建一个指针数组:char * command [argc],然后从argv复制字符串之前,您必须调用malloc()为每个字符串+ 1为该字符串的空终止符分配内存。

    第8行:for语句的格式不正确。 -

    char* command[argc];  // older compiles won't like this line
    char**command = malloc(argc, sizeof(char*)); // alternate way to do it
    for(i = 1; i < argc; ++i) 
    { 
       command[i-1] = malloc(strlen(argv[i])+1);
       strcpy(command[i-1], argv[i]); 
    }
    

  • 第五以南 回复

    谢谢男人,完美的答案!!! 我可以调用函数control(int n,char * COMMAND []) 与指针数组?

  • ret 回复

    谢谢, 但是你能解释一下为什么吗?我在做什么,有什么区别?还有char **和char *之间的区别?

    最后想一想 在使用ARGV []的字符串获取数组COMMAND []之后,我想创建一个名为“ int control(int n,char COMMAND [])”的函数,但是在编译时出现以下错误:

    22.c:40:警告:从不兼容的指针类型传递“ paralello”的参数2

    我认为这与“ char **和char *”类型有关

  • 神经 回复

    如果您这样声明数组:char * command [25]。否则,您可以执行以下操作:conrol(int n,char **命令)。注意:变量名通常不使用大写。