#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的可能。