删除多余的空格,帮我看看哪里出错了。。。

#include <stdio.h>
#include <string.h>

void del_bk();

int main(void)
{
    char *s = "aa bb   cccc  ddd  efg   h";
    puts(s);
    del_bk( s );
    puts(s);
    return 0;
}

void del_bk(char *p)
{
    char *p1=p;
    while( *p1 != '\0' )
    {
        if( *p1==' ' && *(p1+1)==' ' )
            strcpy( p1, p1+1 );
        else
            p1++;
    }
}

图片说明

解决方法:
将char指针s声明为数组就可以了。

详解:
因为你在main()函数中声明的char指针s,指向的是一个字符串常量(在程序开始运行就载入内存,属于静态存储,不允许修改,因为它是只读的),因此,当你尝试修改指针s指向的字符串常量时,由于字符串常量是只读的,系统就会异常终止。

修改后代码如下:

#include <stdio.h>
#include <string.h>

void del_bk();

int main(void)
{
    char s[] = "aa bb   cccc  ddd  efg   h";
    puts(s);
    del_bk( s );
    puts(s);
    return 0;
}

void del_bk(char *p)
{
    char *p1=p;
    while( *p1 != '\0' )
    {
        if( *p1==' ' && *(p1+1)==' ' )
            strcpy( p1, p1+1 );
        else
            p1++;
    }
}

死循环了
一直被if的情况catch了,指针没有向前运动
而且你这样的复制方式,strcpy的原指针和目的指针在同一个内存区,感觉效率低,而且存在bug的可能。