IOS7似乎带有字符串strcpy的新实现(可能是优化)。之前我能够从数组的任何位置复制字符串,但现在如果我从任何位置开始复制(i%4!= 0)它将崩溃。
为了显示这一点,我在iOS6和7中都运行了这个代码,它在7上崩溃了应用程序:
char *x = malloc(1024);
strcpy(x, "hello world");
char *x2 = x + 1;
strcpy(x, x2);
我做错了什么?
答案 0 :(得分:6)
C11标准见§7.24.2.3:
The strcpy function copies the string pointed to by s2 (including the terminating
null character) into the array pointed to by s1. If copying takes place between
objects that overlap, the behavior is undefined.
未定义的行为意味着任何事情都可能发生 - 代码可以完美地运行,可能会崩溃,或者它可以在一天内正常运行并在下一天崩溃。由于x
和x2
在您的代码中重叠,因此它在iOS 6中运行的事实只是抽奖的运气。