直到今天,我都是这样用main:函数写C程序的int main(void)
。但是今天我决定扩大一下自己的视野,写了下面这个函数:int main(int argc, char* argv[])
. 在这里,根据我减去它的文章的参数转移按预期工作。
如果我尝试分别传递每个参数,我决定检查程序将如何工作。这是发生了什么:
我的代码:
#include <stdio.h>
int main(int argc, char* first_arg, char* name, char* name1) {
printf("Argument:\n%s\n%s\n%s", first_arg ,name, name);
return 0;
}
每次通话的结果./start.out некоторая строка здесь
:
Argument:
~�&{�
��&{�
��&{�
现在它与参数数组相同。
我的代码:
#include <stdio.h>
int main(int argc, char* first_arg[1], char* name[1], char* name1[1]) {
printf("Argument:\n%s\n%s\n%s", first_arg[1] ,name[1], name[1]);
return 0;
}
每次通话的结果./start.out некоторая строка здесь
:
Argument:
некоторая
SESSION_MANAGER=local/reiji-Legion-5-15IMH6:@/tmp/.ICE-unix/2497,unix/reiji-Legion-5-15IMH6:/tmp/.ICE-unix/2497
SESSION_MANAGER=local/reiji-Legion-5-15IMH6:@/tmp/.ICE-unix/2497,unix/reiji-Legion-5-15IMH6:/tmp/.ICE-unix/2497
为什么格式中的程序可以char* argv[]
正确接受参数,但如果我将接受参数分为两个独立的类型变量char* argv1
和char* argv2
- 那么我将不会收到任何参数?
它来自哪里SESSION_MANAGER=local/reiji-Legion-5-15IMH6:@/tmp/.ICE-unix/2497,unix/reiji-Legion-5-15IMH6:/tmp/.ICE-unix/2497
,它是关于什么的?
如何调试这种程序——毕竟,调试器运行的是不带参数的被调试程序?
尝试使用不同的命令行参数运行以下程序:
这将为您澄清很多......正在传递一个指针数组,这与一组类型参数不同
char*
!事实上,您的第一个参数原来不是指向字符串的指针,而是指向指针数组的指针 - 这是否足以理解您不能按照您的方式行事?
一般来说,标准并没有明确规定参数应该如何传递给函数,所以只要遵循标准的
章程,一切都会正常进行。顺便说一句,我完全不明白为什么 - 你想通过这种方式实现什么,为什么它比标准的更好(如果有效的话)?至于调试器,普通调试器允许您指定命令行参数...