调用strcpy的结果与预期不同

Blo*_*aRd 4 c strcpy

#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".

为什么23556gcc 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.

  • @Rizier123我附近有C标准草案的副本,如果这就是你要问的:).请参阅[我在哪里可以找到当前的C或C++标准文档?](http://stackoverflow.com/q/81656/1009479). (3认同)
  • @ Rizier123:在我的系统上,它在glibc联机帮助页(`man 3 strcpy`)中有描述:字符串可能不重叠. (2认同)