I made what looks like the required changes, but now I get a bus error.
Code:
void match(int A1[], int n1, int A2[], int n2){
int i,m,a1k,a2i,l,r,a1m;//global variables
int a10=A1[0];
for (i=0; i<n2; i++){//scan all elements of A2
a2i = A2[i];//for efficiency
a1k = A1[i];
if (a10 == a2i || a1k==a2i || A1[n1-1] == a2i) printf("%d\t",a2i);//special cases
else{ //when special case not true
r = n2-1;
l = 0;
if (a2i > a1k){
while(r>=l){//since A1 is sorted
m = (l+r)/2;
if (a2i == (a1m = A1[m])){ //if element is found
printf("%d\t",a1m); //print the element
break;
} else{
if (a1m > a2i) r = m-1;
else l = m+1;
}
}
}
}
}
}
int * arrayExtractor(const char * argv[], char sep[]){
int n,i=1;
while (strcmp(argv[i], sep) != 0){n++;}
static int * A;
for (i=1; i<n; i++){A[i] = atoi(argv[i]);}
return A;
}
int * arrayExtractor2(const char * argv[], char sep[]){
int i=2;
while (strcmp(argv[i], sep) != 0) {i++;}
static int * A1;
for (i=2; argv[i] != '\0'; i++){A1[i] = atoi(argv[i]);}
return A1;
}
int main(int argc, const char * argv[]){
match (arrayExtractor(argv, "/"), sizeof(arrayExtractor(argv, "/")), arrayExtractor2(argv,"/"),sizeof(arrayExtractor2(argv,"/")));
return 0;
}