郎朗坤
取决于编译器memcpy实现的方式一般有三种,从头复制 从尾复制 或者判断复制(等同于memmove)仿照你的 我写了一个测试程序char message2[60] = "abcdefghijklmnopqrstuvwxyz";char tmp[60];int main(){ strcpy(tmp, message2); printf("tmp= \"%s\"\n", tmp); memcpy(tmp+4, tmp + 16, 10); printf("memcpy(tmp+4, tmp + 16, 10);> tmp = \"%s\"\n", tmp); strcpy(tmp, message2); memcpy(tmp+6, tmp +4, 10); printf("memcpy(tmp+6, tmp +4, 10);> tmp = \"%s\"\n", tmp); strcpy(tmp, message2); memcpy(tmp+4, tmp +6, 10); printf("memcpy(tmp+4, tmp +6, 10);> tmp = \"%s\"\n", tmp); }测试结果如下tmp= "abcdefghijklmnopqrstuvwxyz"memcpy(tmp+4, tmp + 16, 10);> tmp = "abcdqrstuvwxyzopqrstuvwxyz"memcpy(tmp+6, tmp +4, 10);> tmp = "abcdefefefijijmnqrstuvwxyz"memcpy(tmp+4, tmp +6, 10);> tmp = "abcdghijklmnopopqrstuvwxyz"可以看到 在memcpy(tmp+6, tmp +4, 10);时出现了覆盖 efefef说明我的编译器(gcc)在做memcpy的时候使用的是头复制 即从起始地址开始复制如果这个不出错 而memcpy(tmp+4, tmp +6, 10);出错 那么就是尾复制都不出错的话 那么就是判断之后智能复制 相当于memmove