我试图实现一个函数,用于从memmove字符串中删除一个子字符串。 打印结果时,看起来好像我没有正确移动子字符串,即使它看起来像我在源字符串中使用了正确的位置。 我的功能是:从一个字符串中删除一个子字符串,使用memmove在C
char * removeSubStr(char * str, const char * substr){
char *scan_p, *temp_p;
int subStrSize = strlen(substr);
if (str == NULL){
return 0;
}
else if (substr == NULL){
return str;
}
else if (strlen(substr)> strlen(str)){
return str;
}
temp_p = str;
while(scan_p = strstr(temp_p,substr)){
temp_p = scan_p + subStrSize;
memmove(scan_p, temp_p, sizeof(temp_p)+1);
}
return str;
}
我的输出,例如是: 如果发送字符串 “请删除REM删除rem999”, 我得到回: “请奥雅纳RM ovmove重999”
谢谢!
(无关您的问题,但你通过'substr'到'strlen'之前,应先试'SUBSTR == NULL'否则,你可能最终调用。 'strlen'在空指针上。) –