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();
}
答案 0 :(得分:2)
两个问题:
printf("%c",p);
它应该是
*p
答案 1 :(得分:0)
我看到的一个直接问题是你从乐趣中返回一个临时缓冲区。这会导致未定义的行为。最好将缓冲区传递给函数或使用一些堆分配(并且不要忘记稍后在main中释放它)。
答案 2 :(得分:0)
您将返回本地数组的地址:
char* fun(char *s){
char buffer[50];
...
return buffer;
}
答案 3 :(得分:0)
将缓冲区声明为静态以消除短期问题,但在第二次调用该函数后,第一个引用将不再具有旧内容 - 它仍将指向缓冲区的新内容。 / p>