前几天在做修改Android的init进程的时候,遇到了一个函数
int do_insmod(int nargs, char **args)
这个函数怎么掉用呢?我定义了一个数组
char test[][10]={
“test“,
”/system/lib/modules/***.ko“
}
do_insmod(0, (char **)test);
然后在int do_insmod(int nargs, char **args)函数中进行打印
printf(”%s\n“,args[1]);
我梦想中是要打印出/system/lib/modules/***.ko的可是怎么滴,系统挂了……
搞了一天,囧 问题没有解决,后来我需要的加载驱动的这个功能被我用脚本实现了就没管它了。
今天又遇到了女盆友问我这个参数该怎么传?
555必须搞定,不然回家跪搓衣板!
先说一下标题的”指向指针的指针“这也就是int do_insmod(int nargs, char **args)参数args需要的东东 就是args本身是一个指针它所指向的也是一个指针(char *),而我定义了一个二位数组(老想着是一样的),我传过来的是test这个二维数组的首地址,而args【1】这其实是第零行滴4列的地址(args是指向指针的指针,所以它的+1或者下标+1,都是加了sizeof(char *)4个字节而不是sizeof(char)),如果我用%c打印而不是用%s他就不会挂,当然也什么东东都打印不出来。
其实不一样!它的本质是”指向数组的指针“
我们想在int do_insmod(int nargs, char **args)这个函数里面实现类似对test这个数组的打印,比如
printf(”%s\n“,args[1]);
printf(”%c\n“,args[1][2]);
就需要定义”指向指针的数组“
char *test[]={
“test“,
”/system/lib/modules/***.ko“
}
do_insmod(0, test);
这样调用
printf(”%s\n“,args[1]):/system/lib/modules/***.ko;
printf("%s\n",*(args+1)+7):/lib/modules/***.ko;
就会打印我想要的结果
当然如果你非要使用二位数组
那么函数就得重写
int do_insmod(int nargs, char (*args)[10])
当然我可没有权利去修改函数的参数,就只能老老实实的写该我的传入内容咯!
oh!头都晕了,学习理科就是悲剧。不知道讲清楚没