我正在创建一个小型C程序,并希望一个char指针数组只保存可执行文件的参数。 目前,此代码还输出所有环境变量:
int main (int argc, const char * argv[]) {
while(argv) {
NSLog(@"Parameter %s\n", *argv);
argv++;
}
}
答案 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]
包含程序名称,其余的是参数。