Привет всем!
Если кого не затруднит - проверьте плз прогу.Я просто тренируюсь работать с указателями и был бы рад если бы кто-нибудь указал бы на ошибки
Суть этой проги в том что она парсит список аргументов командной строки и если найдет требуемый, то исключает этот ключ и вызывает другую прогу, передавая ей тот же список аргументов но без MAGIC_KEY
#include #define MAGIC_KEY "-ff"
int main(int argc,char **argv) {
char *name[argc+1];
int pos=0,i,temp=0,r;
for(i=0;i<argc;i++) {
r=strncmp(*(argv+i),MAGIC_KEY,3);
if(r!=0 && temp==0) {
*(name+i)=*(argv+i);
} else if(r!=0 && temp==1)
{ *(name+i-1)=*(argv+i);}
else{
pos=i;
*(name+i)=*(argv+i+1);
i++;
temp=1;
}
}
if(pos==0) {
syslog(LOG_ERR, "Called without magic key!");
}
*(name+argc)=NULL;
*name="/usr/sbin/modinfo";
execve(*name,name,NULL);
return 0;
}
То есть прога то работает, но вдруг есть какие-то недочеты
Да и еще
По идее стандарт языка требует чтобы в объявлении массива указывалась константа
то бишь нельзя писать так:
int n=5;
char ch[n];
Нужно писать вот так:
const int n=5;
char ch[n];
Если же все-таки n - не константа то нужно использовать malloc
char *ch=malloc(5);
А как быть с char *name[argc+1]?argc ведь тоже не константа