代码之家  ›  专栏  ›  技术社区  ›  CodeFarmer

只打印数字,为什么输出这么奇怪?[关闭]

c
  •  0
  • CodeFarmer  · 技术社区  · 14 年前
    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 回复  |  直到 14 年前
        1
  •  0
  •   user470379    14 年前

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

        2
  •  2
  •   codaddict    14 年前

    • 您返回的指针指向 字符数组 地方的 到 功能。
    • printf("%c",p); 应该是 *p
        3
  •  0
  •   Karel Petranek    14 年前

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

        4
  •  0
  •   KeatsPeeks    14 年前

    返回本地数组的地址:

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