android和Linux下getopt的差别
1. Linux下如果找不到相对应的参数,则会跳过继续找下一个
Android下如果找不到则会直接返回-1,跳出来
2. Linux下通过getopt后会把找到的元素放到数组的前面,没找到的往后移动(除了第一个元素:也就是运行的文件):
举例:
//找的参数分别为-i(带参数) -p(带参数) -r(不带参数) -c(带参数) -s(带参数) -a(带参数)
while((opt = getopt(argc, argv, "i:p:rc:s:a:")) != -1) { switch (opt) { case 'i': break; case 'p': break; case 'r': break; case 's': break; case 'a': break; default: exit(EXIT_FAILURE); } }
运行并查看结果:
desk@desk-ubuntu:~/CANopenSocket/canopend$ ./app/canopend can0 can1 -i 12 can2 -c 34 can3
//下面为运行getopt前参数的打印顺序 0:./app/canopend 1:can0 2:can1 3:-i 4:12 5:can2 6:-c 7:34 8:can3
//下面为运行getopt后参数的打印顺序,很明显可以知道:没有找到的参数在数组中的顺序往后移动 0:./app/canopend 1:-i 2:12 3:-c 4:34 5:can0 6:can1 7:can2 8:can3
Android下则不会改变。