No hesitation No fear 2021-05-24 15:56 采纳率: 93.8%
浏览 23
已采纳

输出结果是Tom is a male,这个代码错在哪里

#include<stdlib.h>;
#include<stdio.h>;
#include<string.h>;
#pragma warning (disable:4996);
void*my_dele(char*a, char*b)
{
    char*p;
    int n = strlen(b);
    printf("n=%d\n", n);
    while (strstr(a, b) != NULL)
    {
        p = strstr(a, b);
        while (*(p + n) != 0)
        {
            *(p) = *(p + n);
            p++;
        }
    }
    printf("%s\n", a);
    return;
}
    

int main()
{
    char a[] = "Tomcat is a male ccatat";
    char b[] = "cat";
    my_dele(a, b);
    printf("%s\n", a);
    system("pause");
    return 0;

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-05-24 16:07
    关注

    给改了一下,主要是while(*(p+n)!=0)循环结束后,要加上*p = 0;不然后面的内容还是在的,只是前移而已,要加上字符串终止符才可以。

    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #pragma warning (disable:4996);
    void* my_dele(char*a, char*b)
    {
    	char*p;
    	int n = strlen(b);
    	printf("n=%d\n", n);
    	while ((p = strstr(a, b)) != NULL)
    	{
    		//p = strstr(a, b);
    		while (*(p + n) != 0)
    		{
    			*(p) = *(p + n);
    			p++;
    		}
    		*p = 0;
    	}
    	printf("%s\n", a);
    	return NULL;
    }
    
    
    int main()
    {
    	char a[] = "Tomcat is a male ccatat";
    	char b[] = "cat";
    	my_dele(a, b);
    	printf("%s\n", a);
    	system("pause");
    	return 0;
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图