只打印数字,为什么输出这么奇怪?

时间:2010-10-19 15:38:28

标签: c

char* fun(char *s) {
  char buffer[50];
  int i=0;
  while(*s){
    if(isdigit(*s)){
      buffer[i++]=*s;
    }
    s++;
  }

  buffer[i]='\0';
  return buffer;
}

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

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

4 个答案:

答案 0 :(得分:2)

两个问题:

  • 你正在返回一个指针 本地的字符数组 功能。
  • printf("%c",p);它应该是 *p

答案 1 :(得分:0)

我看到的一个直接问题是你从乐趣中返回一个临时缓冲区。这会导致未定义的行为。最好将缓冲区传递给函数或使用一些堆分配(并且不要忘记稍后在main中释放它)。

答案 2 :(得分:0)

您将返回本地数组的地址:

char* fun(char *s){
  char buffer[50]; 
  ...
  return buffer;
}

答案 3 :(得分:0)

将缓冲区声明为静态以消除短期问题,但在第二次调用该函数后,第一个引用将不再具有旧内容 - 它仍将指向缓冲区的新内容。 / p>