3

IOS7 似乎带有字符串 strcpy 的新实现(可能是优化)。在我能够从数组的任何位置复制字符串之前,但现在如果我从 (i % 4 != 0) 的任何位置开始复制,它将崩溃。

为了证明这一点,我在 iOS6 和 7 中运行了这段代码,它在 7 上使应用程序崩溃:

  char *x = malloc(1024);
  strcpy(x, "hello world");
  char *x2 = x + 1;
  strcpy(x, x2);

我究竟做错了什么?

4

1 回答 1

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.

未定义的行为意味着任何事情都可能发生——代码可以完美运行,它可能会崩溃,或者它可以在一天正常工作并在下一天崩溃。由于代码xx2存在重叠,因此它在 iOS 6 中工作的事实只是运气好。

于 2013-09-16T10:53:34.740 回答