Your first problem is here:
char str[30]={((6-(2+3))*(3+8/2))^2+3};
That creates a character array with a single 2 followed by 29 zeros. That's not '2' the character, that's 2 the numeric value.
Why? Because it's and expression, and they get evaluated by the compiler and converted to a number.
You could convert it to a string:
char str[30]="((6-(2+3))*(3+8/2))^2+3";
But then your function will probably still not give the results you expect, because I can't see anything in there to "tokenize" the numbers to numeric values instead of single characters. And that also means that if you try to evaluate "666+1" you won;t get what you expect at all!
Start with the debugger to find out what you do have working - but I suspect it's not a lot. That looks like code that was typed in in a single go, had the compilation errors fixed, and was run. That's not a good idea, particularly when you are starting out. Write a small bit, test it very thoroughly, then write the next which uses the now-known-working code. Repeat.
This may help:
How to Write Code to Solve a Problem, A Beginner's Guide[
^]