C - 从可写字符数组中删除第i个字符

Rob*_*777 3 c string

从可写char数组中删除第i个字符(第一个索引为0,第二个为1等).您认为这是执行此任务的合法方式:

void delete_char(char *str, int i) {
    strcpy(str + i,str + i + 1);
}
Run Code Online (Sandbox Code Playgroud)

我们可以指望函数strcpy总是将字符从最左边的位置复制到最右边的位置吗?

hmj*_*mjd 5

发布的代码具有未定义的行为,来自strcpy():

将src指向的字节字符串复制到dest指向的字节字符串. 如果字符串重叠,则行为未定义.还复制终止空字节.

memmove() 可以用来完成任务,记住复制空终止符.