【发布时间】:2015-02-17 05:56:48
【问题描述】:
#include <stdio.h>
#include <string.h>
int main()
{
char src[]="123456";
strcpy(src, &src[1]);
printf("Final copied string : %s\n", src);
}
当我使用 Visual Studio 6 编译器时,它给了我预期的答案“23456”。
为什么这个程序在使用 gcc 4.7.2 编译时会打印“23556”?
【问题讨论】:
-
未定义的行为,使用 memmov() 代替
-
你是怎么知道它在哪里重叠的? &Src[1]="23456" 对!?!那么重叠在哪里?
-
@PeterMiehle 是的,memmov 加上一个额外的
e。 -
src衰减为指向数组src的第一个元素的指针。&src[1]是指向数组第二个元素的指针。由于源字符串的长度不是 0,它们显然是重叠的。 -
这意味着我必须从另一个字符串“
char dest[]="123456";”复制并执行“strcpy(src, &dest[1]);”