*s没有初始化,没有指向一块内存。
while(*str != ' ')当遇到空格的时候就直接退出while循环了,并不会去掉空格。
并且即使你进了while循环,你最后赋值的时候指针s已经到了最后了,也不会正确。
void fun(char* str)
{
char* s = (char*)malloc(sizeof(char) * strlen(str) + 1);
char *tmp = s;
char *tmpS = str;
memset(s, 0, strlen(str) + 1);
while(*str != '\0')
{
if(*str != ' ')
{
*tmp = *str;
tmp++;
}
str++;
}
memset(tmpS, 0, strlen(tmpS));
memcpy(tmpS, s, strlen(s));
free(s);
}
你这样能删那就见鬼了。你只是把指针一直移来移去,根本没有修改内存,怎么能达到目的?你用纸画一下,把内存用格子表示,指针用指向格子的箭头表示,你自己一步步跟着分析一下,自己就知道了。