c – print only number,why it output so weird? – Education Career Blog

char* fun(char *s) {
  char buffer50;
  int i=0;
  while(*s){
    if(isdigit(*s)){
      bufferi++=*s;
    }
    s++;
  }

  bufferi='\0';
  return buffer;
}

int main(){
  char *s="o34";
  char *p="off";

  p=fun(s);
  while(*p){
    printf("%c",p);
    p++;
  }
  //printf("%s",fun(&s0));
  //puts(fun(s));
  getchar();
}

,

Two problems:

  • You are returning a pointer to the
    character array that is local to
    the function.
  • In printf("%c",p); it should be
    *p

,

Declare the buffer as static to remove the short-term problem, but after calling the function a second time, the first reference will no longer have the old contents — it will still point to the new contents of the buffer.

,

One immediate problem I see is that you return a temporary buffer from fun. This causes undefined behavior. Better pass the buffer to the function or use some heap allocation (and do not forget to free it later in main).

,

You’re returning the address of a local array:

char* fun(char *s){
  char buffer50; 
  ...
  return buffer;
}

Leave a Comment