【发布时间】:2015-02-03 19:54:57
【问题描述】:
我在删除位于另一个开头的子字符串时遇到问题。我尝试了 2 或 3 个不同的选项,但是当我打印修改后的字符串时,它们似乎都没有工作。你能告诉我我做错了什么或告诉我其他删除子字符串的方法吗?
这是我使用的代码:
int i;char *c,*p;
c= malloc(200*sizeof(char));
fgets(c,200,stdin);
p=malloc(200*sizeof(char));;
fgets(p,200,stdin);
if (strstr(c,p) != NULL)
{
if ((strlen(c)-strlen(p))>2)
{
c= c+strlen(p);
//memmove(c,c+strlen(p),strlen(c)-strlen(p)+1);
}
}
printf("%s \n",c);
【问题讨论】:
-
请用语言标签(c 和/或 c++)标记问题
-
你应该解释得更仔细。我认为您正在尝试删除在
p中输入的字符串,如果它出现在c中输入的字符串的开头。如果是这样,你需要从c中删除换行符,你需要一个锚定比较(可能是strncmp())进行相等,然后将p中出现在c匹配之后的部分复制到开头p(所以memmove()是正确的,而memcpy()通常是不正确的——更准确地说,它是不正确的,除非p的长度小于c的两倍)。 -
感谢您的帮助!
-
我发现了问题,事实上我正在使用 strstr
标签: c string character substring dynamic-memory-allocation