C语言删除空格的函数strtrim分步解析
char *strtrim(char *s) {
char *p = s, *q = s, *o = s;
printf(">>>p=[%s] q=[%s] o=[%s] s=[%s]\n", p, q, o, s);
while(*s == ' ') s++;
printf(">>>>>>p=[%s] q=[%s] o=[%s] s=[%s]\n", p, q, o, s);
while(*s){
printf(">>>>>>>>>p=[%s] q=[%s] o=[%s] s=[%s]\n", p, q, o, s);
if((*p++ = *s++) != ' ') q = p;
printf(">>>>>>>>>>>>p=[%s] q=[%s] o=[%s] s=[%s]\n", p, q, o, s);
}
*q = 0;
printf(">>>>>>>>>>>>>>>p=[%s] q=[%s] o=[%s] s=[%s]\n", p, q, o, s);
return o;
}
int main() {
char p[15];
memset(p, 0, sizeof(p));
strcpy(p, " abc ");
printf("p=[%s]\n", p);
printf("strtrim(p)=[%s]\n", strtrim(p));
}
打印出来是:
p=[ abc ]
>>>p=[ abc ] q=[ abc ] o=[ abc ] s=[ abc ]
>>>>>>p=[ abc ] q=[ abc ] o=[ abc ] s=[abc ]
>>>>>>>>>p=[ abc ] q=[ abc ] o=[ abc ] s=[abc ]
>>>>>>>>>>>>p=[abc ] q=[abc ] o=[aabc ] s=[bc ]
>>>>>>>>>p=[abc ] q=[abc ] o=[aabc ] s=[bc ]
>>>>>>>>>>>>p=[bc ] q=[bc ] o=[abbc ] s=[c ]
>>>>>>>>>p=[bc ] q=[bc ] o=[abbc ] s=[c ]
>>>>>>>>>>>>p=[c ] q=[c ] o=[abcc ] s=[ ]
>>>>>>>>>p=[c ] q=[c ] o=[abcc ] s=[ ]
>>>>>>>>>>>>p=[ ] q=[ ] o=[abc ] s=[]
>>>>>>>>>>>>>>>p=[ ] q=[] o=[abc] s=[]
strtrim(p)=[abc]
我还是不太理解strtrim函数中o这个值的作用,开始o是指向参数s指向的空间,期间没有对o有操作,最后返回的o,为啥o的变化是:
[ abc ] -> [aabc ] -> [abbc ] -> [abcc ] -> [abc ]
呢?谢谢指点!