title: calculater by using reverse polish notation and using a stack
body: <p>hello everyone I have a segmentation fault ,can you help please? 
   if i have this operater "3 5 +" that mean 3+5
  and like "9 8 * 5 + 4 + sin", "sin(((9*8)+5)+4)"
  so my idea is check if the first and second are numbers and push theem in the stack then when i have operator i pop the numbers and make the calculation then push the answer again. 
  `</p>
  
  <pre><code>typedef struct st_node {
      float val;
      struct st_node *next;
  } t_node;
  
  typedef t_node t_stack;
  
  
  // a function to allocate memory for a stack and returns the stack
  t_stack* fnewCell() {
      t_stack* ret;
      ret = (t_stack*) malloc(sizeof(t_stack));
      return ret;
  }
  // a function to allocate memory for a stack, fills it with value v and pointer n ,    and returns the stack
  t_stack* fnewCellFilled(float v, t_stack* n) {
      t_stack* ret;
      ret = fnewCell();
      ret-&gt;val = v;
      ret-&gt;next =n;
      return ret;
  }
  
  //function to initialize stack
  void initstack(t_stack** stack) {
      fnewCellFilled(0,NULL);
  }
  
  // add new cell
  void insrtHead(t_stack** head,float val) {
      *head = fnewCellFilled(val,*head);
  }
  
  //function to push the value v into the stack s 
  void push(t_stack **s, float val) {
      insrtHead(s,val);
  }
  
  //function to pop a value from the stack and returns it
  int pop(t_stack **s) {
      t_stack* tmp;
      int ret;
      tmp = (*s)-&gt;next;
      ret = (*s)-&gt;val;
      free(*s);
      (*s) = tmp;
      return ret;
  }
  
  int isempty (t_stack *t) {
      return t == NULL;
  }
  
  
  //function to transfer a string(str) to int (value)
  //returns -1 when success , i otherwise
  int str2int(char *str,int *value) {
      int i;
      *value = 0;
      int sign=(str[0]=='-' ? -1 : 1);
      for(i=(str[0]=='-' ? 1 : 0);str[i]!=0;i++) {
          if(!(str[i]&gt;=48 &amp;&amp; str[i]&lt;=57)) // Ascii char 0 to 9
              return i;
          *value= *value*10+(str[i]-48);
      }
      *value = *value * sign;
      return -1;
  }
  
  //a function that takes a string, transfer it into integer and make operation using a stack
  void function(t_stack *stack, char *str)
  {
      char x[10]=" ";
      int y,j,i=0,z;
      printf("++\n");
      if(str[i] != '\0') {
          strcpy(x, strtok(str, " "));
          z= str2int(x, &amp;y);
          if(z == -1) 
          {
              push(&amp;stack,y);
              i=i+2;
          }
      } 
      while(str[i] != '\0')
      {
          strcpy(x, strtok(NULL, " "));
          z= str2int(x, &amp;y);
          if(z == -1) 
          {
              printf("yes %d",y);
              push(&amp;stack,y);
              i=i+2;  
          }
          else 
          { 
              y=pop(&amp;stack);
              j=pop(&amp;stack);
  
              if(x[0] == '+' ) push(&amp;stack,y+j);
                  else if (x[0] == '-' ) push(&amp;stack,j-y);
                  else if(x[0] == '*' ) push(&amp;stack,j*y);
                  else if(x[0] == '/') push (&amp;stack ,j/y);
          } 
      }
  } 
  
  int main() {
      t_stack *s;
      initstack(&amp;s);
      char *str="3 5 +";    
      function(s,str);
      return 0;
  }
  </code></pre>
  
  <p>`</p>