Macos strcpy-anamoly,粗劣的行为 #包括 int main() { char*s; strcpy(s,“asdqw”); strcpy(s,s+2); 返回0; }
这个程序在linux系统中运行时没有显示任何错误,运行正常。 但当在mac osx中运行时,它会显示中止陷阱:6。Macos strcpy-anamoly,粗劣的行为 #包括 int main() { char*s; strcpy(s,“asdqw”); strcpy(s,s+2); 返回0; },macos,strcpy,Macos,Strcpy,这个程序在linux系统中运行时没有显示任何错误,运行正常。 但当在mac osx中运行时,它会显示中止陷阱:6。 为什么会发生这种情况?您必须将内存分配给s。像这样: #include<string.h> int main() { char *s; strcpy(s,"asdqw"); strcpy(s,s+2); return 0; } 否则,将导致未定义的行为。由于行为是未定义的,在Linux上工作和不在OSX上工作都是合理的 此外,正
为什么会发生这种情况?您必须将内存分配给
s
。像这样:
#include<string.h>
int main()
{
char *s;
strcpy(s,"asdqw");
strcpy(s,s+2);
return 0;
}
否则,将导致未定义的行为。由于行为是未定义的,在Linux上工作和不在OSX上工作都是合理的
此外,正如@Florian Zwoch明智地指出的那样,第二个strcpy()操作在重叠的内存区域上,这再次调用了未定义的行为。这是因为strcpy()不允许内存区域重叠。您可能需要使用memmove(s,s+2,sizeof(s+2))代码>,允许目标和源重叠。您可以在Linux上运行“Valgrind”,查看是否存在内存错误
这是一个如何使用它的简单教程
因为这可能是内存问题。此外,第二个strcpy在重叠的内存区域上工作。这个行为是未定义的。你说的@sun在这里不是问题,它仍然会出现同样的错误。这清楚地解释了重叠内存问题。@aswinmythilimalloc()
不是这里唯一的问题。缺少malloc()
和使用strcpy()
都是错误的。
char *s = malloc(100);