Bitwise AND?
Code:
if(openbrac_count==closebrac_count & openbrac_count != 0)
Gave it the input (a(b)) and the strncpy copied (a(b) with NO terminating NULL - is that intended? I guess not, because after k++ and the second time through the outer while, strlen returns some silly number.

What input did you give and what result did you expect (i.e. contents of label)?

Fixed the formatting so here it is for everyone else's benefit (with a couple of other small changes).
Code:
int main()
{
	char inputexp[500];
	char label[50][25];
	printf("enter expression");
	fgets(inputexp,498,stdin);
	// scanf("%s",inputexp);
	strcpy(label[0],inputexp);
	parser(label,label);
	return 0;
}        
     
void parser(char in_str[][25],char out_str[][25])
{
	while(in_str[k]!= '\0')
	{
		int len=strlen(in_str[k]);
		int openbrac_count=0,closebrac_count=0;
		int i=0;
		int from=0;
		while(i<len)
		{
			while(i<len && in_str[k][i]!=')')
			{
				if((in_str[k][i]=='('))
				{                                                                                                                
					openbrac_count++;
				}
				i++;
			}
			while(i<len && in_str[k][i]!='(')
			{
				if(in_str[k][i]==')')
				{                                                                                                                
					closebrac_count++;
				}
				if(openbrac_count==closebrac_count && openbrac_count != 0)
				{
					strncpy(out_str[k+1],&in_str[k][from],i-from);
					p=p+1;

					if (in_str[k][i+1]=='&' || in_str[k][i+1]=='|')
					{     
						from=i+2;
					}                         
				}
				i++;
			}
			if (in_str[k][0]=='G')
			{
				strncpy(out_str[p+1],&in_str[k][2],strlen(in_str[k])-2); 
				parser(in_str,out_str);
			}
			if (in_str[k][0]=='F')
			{
				strncpy(out_str[p+1],&in_str[k][2],strlen(in_str[k])-2); 
				parser(in_str,out_str);
			} 
			if (in_str[k][0]=='X')
			{
				strncpy(out_str[p+1],&in_str[k][2],strlen(in_str[k])-2); 
				parser(in_str,out_str);
			}                                 
		}
		k++;
	}
}