这是我的代码
char strings[10][10] = {"aaa", "bbb", "ccc"};
strcpy(strings[0], strings[0]);
我在Xcode中创建了一个C项目,然后运行它将崩溃。 但如果它是一个Objective-C项目,那就没问题了
答案 0 :(得分:2)
当源和目标重叠(或与您的情况相同)时调用strcpy是C,C ++,Objective-C和Objective-C ++中未定义的行为。未定义的行为意味着"任何事情都可能发生"。 "任何"包括使用一个编译器崩溃而不是与另一个编译器崩溃。它还包括更糟糕的事情。
答案 1 :(得分:0)
如果它是C项目,strcpy将被替换为
#if __has_builtin(__builtin___strcpy_chk) || defined(__GNUC__)
#undef strcpy
#define strcpy(dest, src) \
__builtin___strcpy_chk (dest, src, __darwin_obsz (dest))
#endif