#include <stdio.h>
#include <string.h>
int main()
{
char src[]="123456";
strcpy(src, &src[1]);
printf("Final copied string : %s\n", src);
}
Run Code Online (Sandbox Code Playgroud)
当我使用Visual Studio 6编译器时,它给了我预期的答案" 23456".
为什么23556用gcc 4.7.2编译时这个程序打印" " ?
Yu *_*Hao 12
strcpy(src, &src[1]); 是未定义的行为:
C11§7.24.2.3
strcpy功能该
strcpy函数将指向的字符串s2(包括终止空字符)复制到指向的数组中s1.如果在重叠的对象之间进行复制,则行为未定义.
顺便说一句,memcpy是相似的(但不是memmove).见C FAQ:memcpy和之间有什么区别memmove.