我正在创建一个小型 C 程序,并且想要一个 char 指针数组,该数组只保存可执行文件开始时使用的参数。目前此代码还输出所有环境变量:
int main (int argc, const char * argv[]) {
while(argv) {
NSLog(@"Parameter %s\n", *argv);
argv++;
}
}
我正在创建一个小型 C 程序,并且想要一个 char 指针数组,该数组只保存可执行文件开始时使用的参数。目前此代码还输出所有环境变量:
int main (int argc, const char * argv[]) {
while(argv) {
NSLog(@"Parameter %s\n", *argv);
argv++;
}
}
不要像你那样做循环,而是使用 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 越界访问内存,这纯粹是运气。
更改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]
包含程序名称,其余为参数。