strcpy在ios​​7上表现不同

时间:2013-09-16 10:42:07

标签: c string crash ios7 strcpy

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

为了显示这一点,我在iOS6和7中都运行了这个代码,它在7上崩溃了应用程序:

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

我做错了什么?

1 个答案:

答案 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.

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