IOS7 似乎带有字符串 strcpy 的新实现(可能优化)。在我能够从数组的任何位置复制字符串之前,但现在如果我从任何位置开始复制 (i % 4 != 0) 它将崩溃。
为了说明这一点,我在 iOS6 和 7 中运行了这段代码,它在 7 上崩溃了应用程序:
char *x = malloc(1024);
strcpy(x, "hello world");
char *x2 = x + 1;
strcpy(x, x2);
我究竟做错了什么?
最佳答案
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 中工作的事实只是幸运。关于c - strcpy 在 ios7 上的行为不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18826047/