2010-10-19 53 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; 
}