从可写字符数组中删除第 i 个字符(第一个索引是 0,第二个是 1 等等)。您认为这是执行此任务的合法方式吗:
void delete_char(char *str, int i) {
strcpy(str + i,str + i + 1);
}
我们可以指望函数 strcpy 总是将字符从最左边复制到最右边吗?
您还可以编写自己的代码来避免未定义的行为:
void delete_char(char *str, int i) {
int len = strlen(str);
for (; i < len - 1 ; i++)
{
str[i] = str[i+1];
}
str[i] = '\0';
}
当字符串重叠时接受其他答案strcpy
无法处理,其中memmove可以如下使用,
memmove(str+i, str+i+1, strlen(str) - i);