没有环境变量的参数数组?

时间:2013-11-05 14:36:14

标签: objective-c c

我正在创建一个小型C程序,并希望一个char指针数组只保存可执行文件的参数。 目前,此代码还输出所有环境变量:

int main (int argc, const char * argv[]) {
   while(argv) {
      NSLog(@"Parameter %s\n", *argv);
      argv++;
   }
}

2 个答案:

答案 0 :(得分:3)

不要像你那样做循环,而是使用argc。 argv数组的大小为argc,第一个值argv[0]是正在执行的程序的名称。

int main (int argc, const char * argv[]) {
   for (int i = 1; i < argc; ++i) {
      NSLog(@"Parameter %s\n", argv[i]);
   }
}

您的代码也在转储环境变量,因为它们是在argv之后作为附加参数提供的。事实上,你正在访问argv超出范围的内存,这是纯粹的运气。

答案 1 :(得分:2)

while(argv)更改为while(*argv)。这只会给你一些论据。

main()实际上就像这个main(int argc, char **argv, char **environ)

一样被调用

您正在经历argv并进入environ。这种行为 未定义的不应该被依赖。您的代码本身也将继续经历环境 并且不会停止,你将打印垃圾。

当然,您可以采用其他方式:

for(int i = 0; i < argc; i++) {
  NSLog(@"Parameter %s\n", argv[i]);
}

argv[0]包含程序名称,其余的是参数。