2010-10-19 64 views
0
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(); 
} 
+1

该程序看起来不会很快输出“很奇怪”。它输出了什么? – BoltClock 2010-10-19 15:40:07

+0

投票结束,这里没有真正的问题。 – 2010-10-19 15:40:20

+0

这是缩进问题。 – 2010-10-19 15:46:11

回答

0

声明为静态,除去短期问题的缓冲区,但调用函数第二次,第一参考将不再后有旧的内容 - 它仍然会指向缓冲区的新内容。

2

两个问题:

  • 你是返回一个指针 字符数组是当地到 功能。
  • printf("%c",p);应该 *p
0

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

0

你返回本地阵列地址:

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